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

 

目录
相关文章
|
6月前
|
存储 编译器 程序员
【C++】类与对象(一)类的定义 访问限定符 类的实例化 this指针
【C++】类与对象(一)类的定义 访问限定符 类的实例化 this指针
|
4天前
|
存储 编译器 程序员
【C++】类和对象①(什么是面向对象 | 类的定义 | 类的访问限定符及封装 | 类的作用域和实例化 | 类对象的存储方式 | this指针)
【C++】类和对象①(什么是面向对象 | 类的定义 | 类的访问限定符及封装 | 类的作用域和实例化 | 类对象的存储方式 | this指针)
|
4天前
|
C++
26类的声明和对象的定义
26类的声明和对象的定义
14 0
|
4天前
|
存储 C语言 C++
【c++】类和对象 - 类的访问限定符及封装/作用域和实例化
【c++】类和对象 - 类的访问限定符及封装/作用域和实例化
【c++】类和对象 - 类的访问限定符及封装/作用域和实例化
|
10月前
怎样声明一个类不会被继承,什么场景下会用?
怎样声明一个类不会被继承,什么场景下会用?
44 0
|
11月前
|
编译器
C++11之继承构造函数(using 声明)
C++11之继承构造函数(using 声明)
134 0
|
存储 编译器 程序员
【C++要笑着学】类和对象 | 初识封装 | 访问限定符 | 类的作用域和实例化 | 类对象模型 | this指针(二)
本章将正式开始学习C++中的面向对象,本篇博客涵盖讲解 访问限定符、封装的基础知识、类的作用域和实例化、探究类对象的存储和对于this指针由浅入深地讲解。
125 0
【C++要笑着学】类和对象 | 初识封装 | 访问限定符 | 类的作用域和实例化 | 类对象模型 | this指针(二)
|
存储 Java 编译器
【C++要笑着学】类和对象 | 初识封装 | 访问限定符 | 类的作用域和实例化 | 类对象模型 | this指针(一)
本章将正式开始学习C++中的面向对象,本篇博客涵盖讲解 访问限定符、封装的基础知识、类的作用域和实例化、探究类对象的存储和对于this指针由浅入深地讲解。
119 0
【C++要笑着学】类和对象 | 初识封装 | 访问限定符 | 类的作用域和实例化 | 类对象模型 | this指针(一)
|
C++
C++类和对象的声明、解析、使用(构造、析构函数、友元、命名空间)
C++类和对象的声明、解析、使用(构造、析构函数、友元、命名空间)
67 0
|
缓存 Java 编译器
C++中为多态基类声明虚析构函数
C++中为多态基类声明虚析构函数
180 0