编写C++程序,程序中需要体现类的多重继承、类的多级继承、虚继承、公共继承、保护继承、私有继承、子对象、类的组合、虚函数、纯虚函数等特性,须完整各类的构造函数、析构函数。 逻辑自定。
时间: 2023-08-09 14:11:46 浏览: 41
好的,根据您的要求,我可以给您提供一个简单的 C++ 程序,其中包含了类的多重继承、类的多级继承、虚继承、公共继承、保护继承、私有继承、子对象、类的组合、虚函数、纯虚函数等特性,完整包括各类的构造函数和析构函数。请您查看以下代码:
```c++
#include <iostream>
using namespace std;
// 基类A
class A {
public:
A() { cout << "A constructor" << endl; }
virtual ~A() { cout << "A destructor" << endl; }
virtual void func() { cout << "A func" << endl; }
};
// 基类B
class B {
public:
B() { cout << "B constructor" << endl; }
virtual ~B() { cout << "B destructor" << endl; }
virtual void func() { cout << "B func" << endl; }
};
// 基类C
class C {
public:
C() { cout << "C constructor" << endl; }
virtual ~C() { cout << "C destructor" << endl; }
virtual void func() { cout << "C func" << endl; }
};
// 派生类D,采用公共继承
class D : public A {
public:
D() { cout << "D constructor" << endl; }
virtual ~D() { cout << "D destructor" << endl; }
virtual void func() { cout << "D func" << endl; }
};
// 派生类E,采用保护继承
class E : protected B {
public:
E() { cout << "E constructor" << endl; }
virtual ~E() { cout << "E destructor" << endl; }
virtual void func() { cout << "E func" << endl; }
};
// 派生类F,采用私有继承
class F : private C {
public:
F() { cout << "F constructor" << endl; }
virtual ~F() { cout << "F destructor" << endl; }
virtual void func() { cout << "F func" << endl; }
};
// 派生类G,采用多重继承
class G : public D, public E, public F {
public:
G() { cout << "G constructor" << endl; }
virtual ~G() { cout << "G destructor" << endl; }
virtual void func() { cout << "G func" << endl; }
};
// 派生类H,采用多级继承和虚继承
class H : virtual public G {
public:
H() { cout << "H constructor" << endl; }
virtual ~H() { cout << "H destructor" << endl; }
virtual void func() { cout << "H func" << endl; }
};
// 类的组合
class I {
public:
I() { cout << "I constructor" << endl; }
virtual ~I() { cout << "I destructor" << endl; }
virtual void func() { cout << "I func" << endl; }
};
class J {
public:
J() { cout << "J constructor" << endl; }
virtual ~J() { cout << "J destructor" << endl; }
virtual void func() { cout << "J func" << endl; }
};
class K {
public:
K() { cout << "K constructor" << endl; }
virtual ~K() { cout << "K destructor" << endl; }
virtual void func() { cout << "K func" << endl; }
};
class L {
public:
L() { cout << "L constructor" << endl; }
virtual ~L() { cout << "L destructor" << endl; }
virtual void func() { cout << "L func" << endl; }
};
// 子对象和虚函数
class M : public I, public J {
public:
M() {
cout << "M constructor" << endl;
k = new K;
l = new L;
}
virtual ~M() {
cout << "M destructor" << endl;
delete k;
delete l;
}
virtual void func() {
cout << "M func" << endl;
k->func();
l->func();
}
private:
K *k;
L *l;
};
// 纯虚函数
class N {
public:
virtual ~N() {}
virtual void func() = 0;
};
class O : public N {
public:
virtual ~O() {}
virtual void func() { cout << "O func" << endl; }
};
int main() {
A *a = new D;
a->func();
delete a;
B *b = new E;
b->func();
delete b;
C *c = new F;
c->func();
delete c;
G *g = new G;
g->func();
delete g;
H *h = new H;
h->func();
delete h;
M *m = new M;
m->func();
delete m;
O *o = new O;
o->func();
delete o;
return 0;
}
```
程序中定义了 15 个类,其中:
- A、B、C 分别代表 3 个基类,每个基类中都有一个基本的虚函数 func,用于输出各自的名字;
- D、E、F 分别代表 3 个派生类,采用公共继承、保护继承、私有继承;
- G 代表一个多重继承的派生类,继承了 D、E、F 三个类;
- H 代表一个多级继承和虚继承的派生类,继承了 G;
- I、J、K、L 分别代表 4 个类,用于演示类的组合;
- M 代表一个使用了子对象和虚函数的类,组合了 I、J、K、L 四个类,并在自己的虚函数 func 中调用了 K、L 的虚函数;
- N 是一个抽象类,其中包含一个纯虚函数 func;
- O 继承了 N,实现了纯虚函数 func。
在 main 函数中,我们创建了各种类的对象,并通过调用各自的虚函数 func 来测试它们是否正确地继承和重写了基类的虚函数。同时,我们也测试了子对象的构造函数、析构函数和虚函数的调用情况。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)