private:
Base1b1;
Base2b2;
};
intmain()
{Aobj(1,2,3,4);}
答:
调用基类BASE1的构造函数:
3
调用基类BASE2的构造函数:
2
调用基类BASE1的构造函数:
4
调用基类BASE2构造函数:
1
调用派生类A的构造函数:
10
9.分析下列程序的运行结果。
#include
classA
{public:
A(constchar*s){cout<
~A(){}
};
classB:
virtualpublicA
{public:
B(constchar*s1,constchar*s2):
A(s1)
{cout<};
classC:
virtualpublicA
{public:
C(constchar*s1,constchar*s2):
A(s1)
{cout<};
classD:
publicB,publicC
{public:
D(constchar*s1,constchar*s2,constchar*s3,constchar*s4)
:
B(s1,s2),C(s1,s3),A(s1)
{cout<};
intmain()
{D*ptr=newD("classA","classB","classC","classD");
deleteptr;
}
答:
classA
classB
classC
classD
10.有人定义一个教师类派生一个学生类。
他认为“姓名”和“性别”是教师、学生共有的属性,声明为public,“职称”和“工资”是教师特有的,声明为private。
在学生类中定义特有的属性“班级”和“成绩”。
所以有
classteacher
{public:
charname[20];charsex;
//……
Private:
chartitle[20];doublesalary;
};
classstudent:
publicteacher
{//……
private:
chargrade[20];intscore;
};
你认为这样定义合适吗?
请做出你认为合理的类结构定义。
答:
不合适,这样导致数据冗余。
合理的结构是提取它们共有的数据和操作定义一个基类,然后分别定义teacher和student作为派生类。
classperson
{protected:
charname[20];charsex;
//……
};
classteacher:
publicteache
{//……
private:
chartitle[20];doublesalary;
};
classstudent:
publicteacher
{//……
private:
chargrade[20];intscore;
};
11.定义一个描述坐标位置的类location,从location派生出正方形类square,在正方形类中将location类作为正方形的起始点,并求正方形的周长和面积。
答:
#include
classlocation
{
protected:
intx,y;
public:
location(inta=0,intb=0)
{
x=a;
y=b;
}
};
classsquare:
publiclocation
{
private:
intlen;
intgirth;
intarea;
public:
square(intx,inty,intt):
location(x,y)
{
len=t;
}
voidset();
voidshow();
};
voidsquare:
:
set()
{
girth=4*len;
area=len*len;
}
voidsquare:
:
show()
{
cout<<"正方形的坐标点为:
"<