CPP的继承和多态

简介: CPP的继承和多态

CPP的继承和多态

在C++中,继承(Inheritance)和多态(Polymorphism)是面向对象编程(OOP)的两个核心概念,它们允许我们创建更灵活和可维护的代码结构。

继承(Inheritance)

继承是一种机制,允许一个类(派生类或子类)继承另一个类(基类或父类)的属性和方法。通过继承,我们可以创建一个新的类,这个新类包含现有类的所有特性,并可以添加或覆盖新的特性。

在C++中,使用冒号(:)操作符来表示继承关系。

cpp复制代码

 

class Base {

 

public:

 

void show() {

 

std::cout << "Base class" << std::endl;

 

}

 

};

 

 

 

class Derived : public Base { // Derived继承自Base

 

public:

 

void anotherShow() {

 

std::cout << "Derived class" << std::endl;

 

}

 

};

在这个例子中,Derived类继承了Base类。因此,Derived类的对象可以调用show()方法,该方法是在Base类中定义的。

继承有三种类型:公有继承(public)、私有继承(private)和保护继承(protected)。它们决定了基类成员在派生类中的访问级别。

多态(Polymorphism)

多态允许我们使用基类的指针或引用来操作派生类的对象,同时调用它们各自实现的同名方法。这提供了一种机制,使我们能够以统一的方式处理不同类型的对象。

多态主要通过虚函数(virtual functions)和纯虚函数(pure virtual functions)来实现。

虚函数(Virtual Functions)

在基类中,将成员函数声明为virtual,允许派生类重写该函数。当使用基类的指针或引用来调用虚函数时,会根据实际对象的类型来调用相应的函数实现。

cpp复制代码

 

class Base {

 

public:

 

virtual void show() { // 虚函数

 

std::cout << "Base class" << std::endl;

 

}

 

};

 

 

 

class Derived : public Base {

 

public:

 

void show() override { // 重写虚函数

 

std::cout << "Derived class" << std::endl;

 

}

 

};

 

 

 

int main() {

 

Base* basePtr;

 

Derived derivedObj;

 

basePtr = &derivedObj; // 基类指针指向派生类对象

 

basePtr->show(); // 输出 "Derived class",调用Derived的show()

 

return 0;

 

}

在这个例子中,show()函数在Base类中被声明为虚函数,并在Derived类中被重写。当通过Base类的指针basePtr调用show()函数时,实际调用的是Derived类的show()函数实现。

纯虚函数(Pure Virtual Functions)

纯虚函数是在基类中声明但不定义,且需要在派生类中重写的虚函数。包含纯虚函数的类被称为抽象类(abstract class),它不能被实例化。纯虚函数使用= 0来标记。

cpp复制代码

 

class AbstractBase {

 

public:

 

virtual void pureVirtualFunction() = 0; // 纯虚函数

 

};

 

 

 

class Derived : public AbstractBase {

 

public:

 

void pureVirtualFunction() override { // 在派生类中重写纯虚函数

 

std::cout << "Derived class pure virtual function" << std::endl;

 

}

 

};

在这个例子中,AbstractBase类包含一个纯虚函数pureVirtualFunction(),因此它不能被实例化。Derived类继承了AbstractBase并提供了pureVirtualFunction()的实现。

多态允许我们编写更加通用和灵活的代码,因为它允许我们在运行时确定要执行的具体操作,而不是在编译时。这使得程序能够更好地适应不同的对象和情境。

 

目录
相关文章
|
8月前
|
Kotlin
Kotlin类的定义、构造函数、封装、继承和多态
Kotlin类的定义、构造函数、封装、继承和多态
|
6月前
|
程序员 C++
CPP语法(五)——类的继承
CPP语法(五)——类的继承
36 0
|
9月前
|
存储 C++
CPP的类和对象
CPP的类和对象
68 1
|
Java 程序员
JavaSE/封装、继承、多态
JavaSE/封装、继承、多态
|
测试技术
CPP2022-26-多态专题(下)
CPP2022-26-多态专题(下)
142 0
|
芯片
CPP2022-24-类与对象(下)
CPP2022-24-类与对象
109 0
CPP2022-25-继承与派生(下)
CPP2022-25-继承与派生(下)
163 0