青少年编程与数学 02-010 C++程序设计基础 29课题、继承
- 一、基本概念
- 二、继承的语法
- 三、继承类型
- 四、 派生类的构造和析构
- 五、函数重写(Override)
- 六、多重继承
- 七、虚继承
- 八、总结
课题摘要: 本文详细介绍了C++中继承和派生的概念、语法、类型、构造和析构过程、函数重写、多重继承和虚继承。继承允许派生类从基类继承属性和行为并进行扩展或修改。继承类型包括公有、保护和私有继承,影响基类成员在派生类中的访问权限。派生类构造和析构时,先调用基类相应函数。派生类可重写基类虚函数实现多态。C++支持多重继承,虚继承解决菱形继承问题。合理使用继承可构建层次清晰、结构合理的类体系。
在C++中,继承和派生是面向对象编程的核心概念,允许一个类(派生类)从另一个类(基类)继承属性和行为,并在此基础上进行扩展或修改。
一、基本概念
- 基类(Base Class):被继承的类,也称为父类。
- 派生类(Derived Class):继承基类的类,也称为子类。
派生类继承了基类的成员(数据成员和成员函数),并可以添加新的成员或重写基类的成员函数。
二、继承的语法
class BaseClass {// 基类成员
};class DerivedClass : access-specifier BaseClass {// 派生类成员
};
access-specifier
可以是public
、protected
或private
,决定了基类成员在派生类中的访问权限。
三、继承类型
-
公有继承(public):
- 基类的
public
成员在派生类中仍为public
。 - 基类的
protected
成员在派生类中仍为protected
。 - 基类的
private
成员在派生类中不可访问。
class Base { public:int publicVar; protected:int protectedVar; private:int privateVar; };class Derived : public Base {// publicVar 是 public// protectedVar 是 protected// privateVar 不可访问 };
- 基类的
-
保护继承(protected):
- 基类的
public
和protected
成员在派生类中都变为protected
。 - 基类的
private
成员在派生类中不可访问。
class Derived : protected Base {// publicVar 是 protected// protectedVar 是 protected// privateVar 不可访问 };
- 基类的
-
私有继承(private):
- 基类的
public
和protected
成员在派生类中都变为private
。 - 基类的
private
成员在派生类中不可访问。
class Derived : private Base {// publicVar 是 private// protectedVar 是 private// privateVar 不可访问 };
- 基类的
四、 派生类的构造和析构
- 构造函数:派生类的构造函数会先调用基类的构造函数,再执行派生类的构造函数体。
- 析构函数:派生类的析构函数会先执行派生类的析构函数体,再调用基类的析构函数。
class Base {
public:Base() { cout << "Base Constructor" << endl; }~Base() { cout << "Base Destructor" << endl; }
};class Derived : public Base {
public:Derived() { cout << "Derived Constructor" << endl; }~Derived() { cout << "Derived Destructor" << endl; }
};int main() {Derived d;return 0;
}
输出:
Base Constructor
Derived Constructor
Derived Destructor
Base Destructor
五、函数重写(Override)
派生类可以重写基类的虚函数(virtual
),以实现多态。
class Base {
public:virtual void show() {cout << "Base show" << endl;}
};class Derived : public Base {
public:void show() override {cout << "Derived show" << endl;}
};int main() {Base* b = new Derived();b->show(); // 输出: Derived showdelete b;return 0;
}
六、多重继承
C++支持多重继承,即一个派生类可以从多个基类继承。
class Base1 {
public:void show1() {cout << "Base1 show" << endl;}
};class Base2 {
public:void show2() {cout << "Base2 show" << endl;}
};class Derived : public Base1, public Base2 {
};int main() {Derived d;d.show1(); // 输出: Base1 showd.show2(); // 输出: Base2 showreturn 0;
}
七、虚继承
虚继承用于解决多重继承中的菱形继承问题,确保基类只被继承一次。
class Base {
public:int data;
};class Derived1 : virtual public Base {
};class Derived2 : virtual public Base {
};class FinalDerived : public Derived1, public Derived2 {
};int main() {FinalDerived fd;fd.data = 10; // 不会产生二义性return 0;
}
八、总结
- 继承允许派生类复用基类的代码。
- 继承类型决定了基类成员在派生类中的访问权限。
- 派生类可以重写基类的虚函数以实现多态。
- 多重继承和虚继承提供了更灵活的继承机制,但也增加了复杂性。
通过合理使用继承和派生,可以构建出层次清晰、结构合理的类体系。