49派生类的声明方式和构成

简介: 49派生类的声明方式和构成

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` 的析构函数来释放资源。

 

目录
相关文章
|
7月前
|
设计模式 Java 编译器
面向对象编程中的继承与多态:深入理解父类引用指向子类实例
面向对象编程中的继承与多态:深入理解父类引用指向子类实例
|
存储 编译器 程序员
【C++】类与对象(一)类的定义 访问限定符 类的实例化 this指针
【C++】类与对象(一)类的定义 访问限定符 类的实例化 this指针
|
安全 Java 编译器
C++将派生类赋值给基类
在 C/C++ 中经常会发生数据类型的转换,例如将 int 类型的数据赋值给 float 类型的变量时,编译器会先把 int 类型的数据转换为 float 类型再赋值;反过来,float 类型的数据在经过类型转换后也可以赋值给 int 类型的变量。 数据类型转换的前提是,编译器知道如何对数据进行取舍。例如: int a = 10.9; printf("%d\n", a); 输出结果为 10,编译器会将小数部分直接丢掉(不是四舍五入)。再如: float b = 10; printf("%f\n", b); 输出结果为 10.000000,编译器会自动添
145 0
|
7月前
|
存储 C语言 C++
【c++】类和对象 - 类的访问限定符及封装/作用域和实例化
【c++】类和对象 - 类的访问限定符及封装/作用域和实例化
【c++】类和对象 - 类的访问限定符及封装/作用域和实例化
怎样声明一个类不会被继承,什么场景下会用?
怎样声明一个类不会被继承,什么场景下会用?
82 0
|
编译器
C++11之继承构造函数(using 声明)
C++11之继承构造函数(using 声明)
278 0
|
存储 编译器 C++
C++ 类和对象之六个默认成员函数
我们知道,如果一个类中什么成员都没有就叫它空类。 但是空类中什么都没有吗? 难道不是吗? 并不是,任何类在什么都不写的时候,编译器会自动生成以下六个默认成员函数
153 0
基类与派生类对象的关系 派生类的构造函数
🐰 基类与派生类对象的关系 🐰派生类的构造函数
|
C++ Python
C++派生类对基类的访问详解
C++派生类对基类的访问详解
478 0
|
C++
C++类和对象的声明、解析、使用(构造、析构函数、友元、命名空间)
C++类和对象的声明、解析、使用(构造、析构函数、友元、命名空间)
81 0