编写C++程序,程序中需要体现类的多重继承、类的多级继承、虚继承、公共继承、保护继承、私有继承、子对象、类的组合、虚函数、纯虚函数等特性,须完整各类的构造函数、析构函数。
时间: 2023-08-31 19:53:27 浏览: 115
下面是一个示例程序,展示了C++中类的多重继承、类的多级继承、虚继承、公共继承、保护继承、私有继承、子对象、类的组合、虚函数、纯虚函数等特性的使用。请注意,这只是一个简单的示例,可能不涵盖所有情况,但可以帮助你理解这些特性的基本概念。
```cpp
#include <iostream>
using namespace std;
// 基类A
class A {
public:
A() {
cout << "Constructing A" << endl;
}
virtual ~A() {
cout << "Destructing A" << endl;
}
virtual void foo() {
cout << "A::foo()" << endl;
}
};
// 基类B
class B {
public:
B() {
cout << "Constructing B" << endl;
}
virtual ~B() {
cout << "Destructing B" << endl;
}
virtual void bar() {
cout << "B::bar()" << endl;
}
};
// 派生类C,多重继承自A和B
class C : public A, public B {
public:
C() {
cout << "Constructing C" << endl;
}
~C() {
cout << "Destructing C" << endl;
}
void foo() override {
cout << "C::foo()" << endl;
}
void bar() override {
cout << "C::bar()" << endl;
}
};
// 派生类D,多级继承自C
class D : public C {
public:
D() {
cout << "Constructing D" << endl;
}
~D() {
cout << "Destructing D" << endl;
}
void foo() override {
cout << "D::foo()" << endl;
}
};
// 派生类E,虚继承自A
class E : virtual public A {
public:
E() {
cout << "Constructing E" << endl;
}
~E() {
cout << "Destructing E" << endl;
}
};
// 派生类F,公共继承自A
class F : public A {
public:
F() {
cout << "Constructing F" << endl;
}
~F() {
cout << "Destructing F" << endl;
}
};
// 派生类G,保护继承自A
class G : protected A {
public:
G() {
cout << "Constructing G" << endl;
}
~G() {
cout << "Destructing G" << endl;
}
};
// 派生类H,私有继承自A
class H : private A {
public:
H() {
cout << "Constructing H" << endl;
}
~H() {
cout << "Destructing H" << endl;
}
};
// 类的组合,使用A类的对象作为成员变量
class I {
private:
A objA;
public:
I() {
cout << "Constructing I" << endl;
}
~I() {
cout << "Destructing I" << endl;
}
};
// 虚函数和纯虚函数
class Base {
public:
virtual void foo() {
cout << "Base::foo()" << endl;
}
virtual void pureVirtual() = 0;
};
class Derived : public Base {
public:
void foo() override {
cout << "Derived::foo()" << endl;
}
void pureVirtual() override {
cout << "Derived::pureVirtual()" << endl;
}
};
int main() {
// 多重继承示例
C c;
c.foo(); // 调用C::foo()
c.bar(); // 调用C::bar()
cout << endl;
// 多级继承示例
D d;
d.foo(); // 调用D::foo()
d.bar(); // 调用C::bar()
cout << endl;
// 虚继承示例
E e;
e.foo(); // 调用A::foo()
cout << endl;
// 公共继承示例
F f;
f.foo(); // 调用A::foo()
cout << endl;
// 保护继承示例
G g;
// g.foo(); // 编译错误,无法访问A类的公有成员函数
cout << endl;
// 私有继承示例
H h;
// h.foo(); // 编译错误,无法访问A类的公有成员函数
cout << endl;
// 子对象示例
I i;
cout << endl;
// 虚函数和纯虚函数示例
Base* base = new Derived();
base->foo(); // 调用Derived::foo()
base->pureVirtual(); // 调用Derived::pureVirtual()
delete base;
return 0;
}
```
这个程序展示了类的多重继承、类的多级继承、虚继承、公共继承、保护继承、私有继承、子对象、类的组合、虚函数和纯虚函数等特性的使用。通过运行程序,你可以看到各个类的构造函数和析构函数的调用顺序,以及不同类的成员函数的调用结果。
阅读全文