C++第07课 继承 (一)

1.基本概念

继承: 父类 子类 ,子类没产生新的东西

派生:基类 派生类

继承A 产生B ,A B

2.继承的实质

父类的属性在子类中也存在一份,构造函数不能被继承

3.继承的权限问题

| | public | protected | private |
| ------------- | ------------- | ------------- | -------- |
| public继承 | public属性 | protected属性 | 不可访问 |
| protected继承 | protected属性 | protected属性 | 不可访问 |
| private继承 | private属性 | private属性 | 不可访问 |

综上: 假设public属性是最低 ,private属性是最高的,那么可以发现问题,继承方式只会增强父类的属性在子类当中的权限强度,任何继承方式的父类的私有属性子类都不可以直接访问。

class parent {
public:
    int a;
protected:
    int b;
private:
    int c;
};
class son :private parent{
public:
    void print() {
        this->a = 0;    //公有属性可以访问
        this->b = 1;    //保护属性可以访问
        //this->c=2;    私有属性不可访问
    }
};

int main()
{
    son s;
    //s.a = 1;    //只能访问公有属性
    return 0;
}

4.继承的构造函数写法

+ 子类的构造函数必须要采用**初始化参数列表**的写法
+ 子类构造函数必须调用父类构造函数初始化继承下来的属性,也就是父类属性只能通过父类的构造函数初始化
+ 构造子类对象时候,必定先调用父类的构造函数

class parent {
public:
    parent() { cout << "父类默认构造" << endl; }
    parent(int a, int b, int c) :a(a), b(b), c(c) {}
    int a;
protected:
    int b;
private:
    int c;
};
class son :public parent{
public:
    //下述为省略写法,显式写法:son():parent(){}
    son(){ cout << "子类默认构造" << endl; }
    son(int a, int b, int c) :parent(a, b, c) {}
};

int main()
{
    son s;
    //输出:父类默认构造
    //        子类默认构造
    son ss(1, 2, 3);
    return 0;
}

 

posted @ 2021-09-06 11:08  Creature_lurk  阅读(28)  评论(0编辑  收藏  举报