C++多继承

C++多继承教程

C++ 中,当派生类只有一个基类时,称为单继承,同时,在 C++ 中,也是支持多继承的,多继承,也就是一个派生类有多个基类。

多继承容易让代码逻辑复杂、思路混乱,一直备受争议,中小型项目中较少使用,后来的 Java、C#、PHP 等干脆取消了多继承。

C++多继承详解

语法

class D: public A, private B, protected C{ //类D新增加的成员 }

说明

我们定义了类 D,同时它以公有的方式继承 A 类,以私有的方式继承 B 类,以保护的方式继承 C 类。D 根据不同的继承方式获取 A、B、C 中的成员,确定它们在派生类中的访问权限。

案例

C++多继承

子类继承多个父类时,就称为多继承

#include <iostream> using namespace std; //工人类 class Worker { public: Worker() { cout << "Call Worker" << endl; } ~Worker() { cout << "Call ~Worker" << endl; } }; //儿童类 class Children { public: Children() { cout << "Call Children" << endl; } ~Children() { cout << "Call ~Children" << endl; } }; //童工类 class ChildrenWorker:public Worker, public Children { public: ChildrenWorker() { cout << "Call ChildrenWorker" << endl; } ~ChildrenWorker() { cout << "Call ~ChildrenWorker" << endl; } }; int main(void) { cout << "嗨客网(www.haicoder.net)\n" << endl; ChildrenWorker childWorker; return 0; }

程序运行后,控制台输出如下:

12_C多继承.png

我们定义了一个 ChildrenWorker 类,其共有继承了 Worker 类和 Children 类,这里,一个子类有两个父类,这就是多继承。

C++多继承

子类继承多个父类时,就称为多继承

#include <iostream> #include <string> using namespace std; //工人类 class Worker { public: Worker() { cout << "Call Worker" << endl; } ~Worker() { cout << "Call ~Worker" << endl; } public: float salary; }; //儿童类 class Children { public: Children() { cout << "Call Children" << endl; } ~Children() { cout << "Call ~Children" << endl; } public: float score; }; //童工类 class ChildrenWorker:public Worker, public Children { public: ChildrenWorker(string name):m_name(name) { cout << "Call ChildrenWorker" << endl; } void info() { cout << "Name = " << this->m_name << " Salary = " << this->salary << " Score = " << this->score << endl; } ~ChildrenWorker() { cout << "Call ~ChildrenWorker" << endl; } private: string m_name; }; int main(void) { cout << "嗨客网(www.haicoder.net)\n" << endl; ChildrenWorker childWorker("HaiCoder"); childWorker.salary = 100; childWorker.score = 99; childWorker.info(); return 0; }

程序运行后,控制台输出如下:

13_C多继承.png

我们可以看到,我们使用了 ChildrenWorker 公有继承了 Worker 类和 Children 类,同时,ChildrenWorker 类从 Worker 类和 Children 类继承了所有的非私有的成员属性和方法。

C++多继承总结

在 C++ 中,当派生类只有一个基类时,称为单继承,同时,在 C++ 中,也是支持多继承的,多继承,也就是一个派生类有多个基类。