【C++】继承,菱形继承,虚拟继承,组合详解

目录

1. 继承概念与定义

1.1 概念

1.2 定义

2. 父类与子类的赋值规则

3. 继承的作用域

4. 子类的默认成员函数

5. 继承与友元

6. 继承与静态成员

7. 菱形继承

7.1 继承关系

7.2 菱形继承的问题

7.3 虚拟继承

8. 继承与组合


1. 继承概念与定义

1.1 概念

1. 继承:保持原有类特性的基础上进行扩展,增加功能,这样产生新的类(派生类),本质是类的复用。

2. 子类会继承父类的成员变量和成员函数。

class Person
{
public:
     void Print()
     {
        ...
     }

protected:
     string _name = "peter"; // 姓名
     int _age = 18;  // 年龄
};

class Student : public Person
{
protected:
     int _stuid; // 学号
};

class Teacher : public Person
{
protected:
     int _jobid; // 工号
};

int main()
{
     Student s;
     Teacher t;
     s.Print();
     t.Print();
     return 0;
}

1.2 定义

【格式】

【继承方式】

1. 有三种继承方式。

【继承后成员访问限定符的变化】

1. 父类私有成员继承后子类不可见不可用,无论子类类内类外。

2. 父类公有或保护成员继承后与继承方式比较,谁小就是谁,public > protected > private。

3. 父类的保护成员,类外不能访问,但是可以继承给子类类内访问。

2. 父类与子类的赋值规则

1. 子类可以赋值给父类/父类指针/父类引用。

2. 父类不可以赋值给子类。

3. public继承中,子类可以看作是一个特殊的父类,is-a的关系。

class Person
{
protected :
    string _name; // 姓名
    string _sex;  // 性别
    int _age; // 年龄
};

class Student : public Person
{
public :
     int _No ; // 学号
};

void Test ()
{
 Student s;
 
 Person p = s;
 Person* pp = &s; //指向子类的父类部分
 Person& rp = s; //父类部分的引用
}

3. 继承的作用域

1. 父类和子类都有自己的独立作用域。

2. 父类和子类允许有同名成员,默认访问子类的,因为隐藏了父类的同名成员,想访问父类的同名成员使用基类::基类成员显示访问。

class Person
{
protected :
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值