类与对象-继承-继承语法
继承语法
#include<iostream>
using namespace std;class Base1
{
public:Base1(){m_A = 100;}int m_A;
};
class Base2
{
public:Base2(){m_B = 200;}int m_B;
};//子类需要继承Base1和Base2
class Son :public Base1, public Base2
{
public:Son(){m_C = 300;m_D = 400;}int m_C;int m_D;
};
void test01()
{Son s;cout << "sizeof Son = " << sizeof(s) << endl;//16cout << "m_A = " << s.Base1::m_A << endl;cout << "m_B = " << s.Base2::m_B << endl;
}
int main() {test01();return 0;
}// _ooOoo_ //
// o8888888o //
// 88" . "88 //
// (| ^_^ |) //
// O\ = /O //
// ____/`---'\____ //
// .' \\| |// `. //
// / \\||| : |||// \ //
// / _||||| -:- |||||- \ //
// | | \\\ - /// | | //
// | \_| ''\---/'' | | //
// \ .-\__ `-` ___/-. / //
// ___`. .' /--.--\ `. . ___ //
// ."" '< `.___\_<|>_/___.' >'"". //
// | | : `- \`.;`\ _ /`;.`/ - ` : | | //
// \ \ `-. \_ __\ /__ _/ .-` / / //
// ========`-.____`-.___\_____/___.-`____.-'======== //
// `=---=' //
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
// 佛祖保佑 永无BUG 永不修改 //
多继承的基本语法及知识点
基本语法
class Base1 {// Base1 类的定义
};class Base2 {// Base2 类的定义
};class Derived : access-specifier Base1, access-specifier Base2 {// Derived 类的定义,同时继承自 Base1 和 Base2
};
- Base1 和 Base2 是两个基类,分别定义了它们自己的成员变量和成员函数。
- Derived 是派生类,通过
access-specifier
(可以是public
、protected
或private
)指定每个基类的继承方式。
继承方式
- public 继承:
- 使用
public
继承时,基类的public
和protected
成员在派生类中保持相应的访问权限。 - 基类的
private
成员在派生类中不可访问。
- protected 继承:
- 使用
protected
继承时,基类的public
和protected
成员在派生类中变为protected
成员。 - 基类的
private
成员在派生类中不可访问。
- private 继承:
- 使用
private
继承时,基类的public
和protected
成员在派生类中变为private
成员。 - 基类的
private
成员在派生类中不可访问。
名称冲突解决
- 如果多个基类中有相同的成员名称,可能会引起名称冲突。可以使用作用域解析运算符
::
来明确指定访问哪个基类的成员。
调用基类构造函数
- 派生类需要负责调用每个基类的构造函数来初始化基类的部分。
- 构造函数的调用顺序是按照基类在派生类中声明的顺序,与初始化列表中的顺序无关。