- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章 继承与类的派生.ppt
第五章 继承与类的派生 例如: 简单的汽车分类图 为实现上述操作功能,需要定义了矩阵类 matrix 作 为对线性方程的系数矩阵进行操作的基类,它所提供 的操作功能: ? 构造函数:根据指定的行和列构造相应的矩阵; ? 重载调用运算符 operator():根据索引的行、列值, 引用相应的矩阵元素; ? 输出显示函数:格式显示矩阵的全部元素值。 线性方程组类 lineqns 从 matrix 派生,主要操作有: ? 构造函数:用传递的方程个数和解进行初始化; ? 参数产生:产生方程组的各变量系数值和常量值, 从而构造方程组; ? 高斯求解函数:使用消元法求解方程组。 lineqns 和 matrix 派生关系: 2 详细设计 ⑴ 类设计 ① matrix 类 ⅰ类定义: class matrix { short rows, cols; double *elems; public: matrix(short rows, short cols); ~matrix(); double operator() (short row, short col); void print(); }; ② lineqns 类 ⅰ类定义: class lineqns public matrix { int neqns; double *solution; public: lineqns(int n, double *soln); ~lineqns() void generate(int coef); void solve(); }; ⅱ算法描述: ? generate :用于产生方程的变元系数和常数 generate(coef) 参数 coef 指定系数的值域范围 BEGIN 计算系数的中值 mid = coef / 2; for i = 1 to 方程个数 n, step = 1 设置方程组矩阵中的常数(i, n+1)的初值为0; for j = 1 to 变量个数 n, step = 1 计算系数(i, j) = mid – rand() % coef; 计算常数(i, n+1) += 系数(i, j); endfor endfor END ? solve :高斯消元求解 使用 N-S 流程图描述,图中的符号约定说明: diag 系数矩阵主对角线元素的行、列标识; piv 同列系数中最大元素值的行标识; neqns 方程组中的方程个数标识; r 行序号循环标识; c 列序号循环标识; factor 用于消去指定系数元的变换因子标识; print 显示系数矩阵的功能函数标识; soln 线性方程组的解矩阵标识; sum 求解过程中累加和标识。 a 系数标识。 C 常数标识。 ⑵ 类应用 main 函数的算法: 返回 class x { int a; public: … }; class y : x { x::a; // 非法 public: … }; 3 访问域声明仅用于在派生类中保持基类(公有或保护)成员的原有访问属性,不允许修改它们的访问属性。也就是说,基类的保护成员只能在派生类的保护段中进行声明;而基类的公有成员只能在派生类的公有段中进行声明。例如: class x { int a; protected: int b; public: int c; }; class y : x { public: x::b; // 错误 protected: x::c; // 错误 }; 正确的访问域声明应为: class y : x { public: x::c; protected: x::b; }; 4 在派生类中对基类的重载成员函数名的访问域声明 将调整基类中所有以该名命名的成员函数的访问属 性。例如: class x { … public: f(); f(int); f(char*); }; class y : x { … public: x::f; }; 在派生类中说明了 x::f 后,基类 x 中所有以 f 命名的 成员函数在派生类中都保持原
文档评论(0)