CBase2(int b) :b(b) { cout<<\ } ~CBase2() { cout<<\ } void print() { cout<<\ } protected: int b; };
class CDerive:public CBase1,public CBase2 {
public: CDerive() { cout<<\ } ~CDerive() { cout<<\ } void print() { CBase1::print(); CBase2::print(); b1.print(); b2.print(); cout<<\ } private: CBase1 b1;
CBase2 b2; int c; };
void main() { CDerive d; d.print(); }
问题一:改正以上程序中的错误,并分析输出结果。
答:CBase1与CBase2没有合适的构造函数,改正方法在CBase1,CBase2设置缺省值为0
改正:将CDerive构造函数改为:CDerive(int a,int b,int c): CBase1(a),CBase2(b),b1(a),b2(b),c(c) { cout<<\ }
主函数中CDerive d;改为 CDerive d (1,2,3); 输出结果是:
实验七 多态性—函数与运算符的重载
7.1 实验目的
1. 理解静态联编和动态联编的概念; 2. 掌握成员函数方式运算符重载; 3. 掌握友元函数方式运算符重载; 4. 掌握++、--、=运算符的重载。
7.2 实验内容
1. 理解下面的程序并运行,然后回答后面的问题。 #include\class CComplex {
public: CComplex() { real=0; imag=0; } CComplex(int x,int y) { real=x; imag-y; } int real; int imag; CComplex operator+(CComplex obj1) { CComplex obj2(real+obj1.real,imag+obj1.imag); return obj2; } };
void main() {
CComplex obj1(100,30); CComplex obj2(20,30); CComplex obj; obj=obj1+obj2; cout< 问题一:①处的运算符重载,为什么该函数的返回值要设计成Ccomplex类型? 答:①处运算符重载,要返回两个值real和imag,所以函数返回值类型设计为CComplex类型。 问题二:②处的运算符重载函数调用就相当于“obj=operator+(obj1,obj2);”,请问CComplex类中的运算符重载函数为什么只有一个参数? 答:因为调用重载运算符的对象本身相当于一个参数。 课后习题 第二章 一 实验目的 1.掌握引用的使用。 2.掌握调用函数的方法。 二.实验内容 2.19 写出下列程序的运行结果。 #include int temp; temp=m; m=n; n=temp; } Int main() { int a=5,b=10; f(a,b)