C实验三继承和派生类(附答案解析)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三继承和派生类
实验目的和要求
1.理解类的继承的概念,能够定义和使用类的继承关系。
2.掌握派生类的声明与定义方法。
3.熟悉公有派生和私有派生的访问特性。
4.学习虚基类在解决二义性问题中的作用。
实验内容
1.先阅读下面的程序,分析程序运行的结果,然后再上机运行程序,验证自己分析的结果是否正确。
(1)
#include
class A
{
public:
A()
{
cout<<"A::A() called.\n";
}
~A()
{
cout<<"A::~A() called.\n";
}
};
class B:public A
{
public:
B(int i)
{
cout<<"B::B() called.\n";
buf=new char[i];
}
~B()
{
delete []buf;
cout<<"B:~B() called.\n";
}
private:
char *buf;
};
void main()
{
B b(10);
}
(2)
#include
class A
{
public:
A(int a,int b):x(a),y(b)
{
cout<<"A constructor..."< } void Add(int a,int b) { x+=a; y+=b; } void display() { cout<<"("< } ~A() { cout<<"destructor A..."< } private: int x,y; }; class B:private A { private: int i,j; A Aobj; public: B(int a,int b,int c,int d):A(a,b),i(c),j(d),Aobj(1,1) { cout<<"B constructor..."< } void Add(int x1,int y1,int x2,int y2) { A::Add(x1,y1); i+=x2; j+=y2; } void display() { A::display(); Aobj.display(); cout<<"("< } ~B() { cout<<"destructor B..."< } }; void main() { B b(1,2,3,4); b.display(); b.Add(1,3,5,7); b.display(); } (3) #include class A { public: A(int a):x(a) { cout<<"A constructor..."< } int f() { return ++x; } ~A() { cout<<"destructor A..."< } private: int x; }; class B:public virtual A { private: int y; A Aobj; public: B(int a,int b,int c):A(a),y(c),Aobj(c) { cout<<"B constructor..."< } int f() { A::f(); Aobj.f(); return ++y; } void display() { cout< } ~B() { cout<<"destructor B..."< } }; class C:public B { public: C(int a,int b,int c):B(a,b,c),A(0) { cout<<"C constructor..."< } class D:public C,virtual public A { public: D(int a,int b,int c):C(a,b,c),A(c) { cout<<"D constructor..."< } ~D() { cout<<"destructor D..."< } }; void main() { D d(7,8,9); d.f(); d.display(); } (4) #include class Base1