C++入门——60s从0到1
派生类的声明方式和构成
在C++中,派生类是通过继承(`:`)关键字来声明的。派生类继承了基类的成员,并可以添加新的成员或重写基类的成员。
派生类的声明方式
声明一个派生类的方式如下:
class DerivedClass : public BaseClass {
// 成员列表
};
其中,`DerivedClass` 是派生类的名称,`BaseClass` 是基类的名称。在 `:` 后面可以加上 `public`、`protected` 或 `private` 来指定继承方式。如果不指定继承方式,则默认为 `public` 继承。
公有继承
如果使用公有继承(`public`),基类的公有成员和保护成员在派生类中保持相同的访问权限,而基类的私有成员在派生类中是不可访问的。
class DerivedClass : public BaseClass {
// 成员列表
};
保护继承
如果使用保护继承(`protected`),基类的公有成员和保护成员在派生类中变为保护成员,而基类的私有成员在派生类中是不可访问的。
class DerivedClass : protected BaseClass {
// 成员列表
};
私有继承
如果使用私有继承(`private`),基类的公有成员和保护成员在派生类中变为私有成员,而基类的私有成员在派生类中是不可访问的。
class DerivedClass : private BaseClass {
// 成员列表
};
多重继承
一个派生类可以同时从多个基类继承,这种继承方式称为多重继承。在声明多重继承时,需要在 `:` 后列出所有基类名称,中间用逗号分隔。
class DerivedClass : public BaseClass1, public BaseClass2 {
// 成员列表
};
构造函数和析构函数
当创建一个派生类对象时,会调用其构造函数来初始化对象。与普通函数不同,构造函数没有返回类型,并且名称必须与类名相同。构造函数可以被声明为默认构造函数、拷贝构造函数、移动构造函数等。
同样地,当一个派生类对象超出作用域时,会调用其析构函数来释放资源。析构函数必须为虚函数以便正确地进行多态析构操作。
示例代码
下面是一个简单的示例代码,演示如何声明和使用一个派生类:
#include <iostream> using namespace std; // 基类 Shape 的声明 class Shape { public: Shape() { cout << "Shape constructor" << endl; } virtual ~Shape() { cout << "Shape destructor" << endl; } virtual void draw() = 0; // pure virtual function }; // 派生类 Circle 的声明 class Circle : public Shape { public: Circle() { cout << "Circle constructor" << endl; } ~Circle() { cout << "Circle destructor" << endl; } void draw() override { cout << "Drawing a circle..." << endl; } // 重写 draw 方法 }; int main() { Circle c; // 创建 Circle 对象 return 0; // main 函数结束,程序退出时自动调用 Circle 的析构函数 }
在这个示例中,我们定义了一个 `Shape` 基类和一个 `Circle` 派生类。`Circle` 从 `Shape` 公有继承而来,并重写了 `draw` 方法。在 `main` 函数中创建了一个 `Circle` 对象 `c`,当程序退出时会自动调用 `Circle` 的析构函数来释放资源。