(二)c++类的继承与派生

版权声明:文章只是自己学习的记录,本人不能保证全部正确。希望大神多多指点,帮助菜鸟进步。 https://blog.csdn.net/Emptynest/article/details/70210185

继承与派生

类的派生定义

class derived_class:access_control base_class
{
    //派生类的属性和方法
    //虚函数重写
};

derived_class 就是我们派生的新的类。
base_class 就是被继承的类,我们成为基类或者父类。
access_control 就是访问控制,分为public、private、protected。


继承的重要说明

  1. 子类拥有父类的所用成员变量和成员函数(除了构造函数和析构函数);
  2. 子类可以添加新的属性和方法;
  3. 子类是一种特殊的父类;
  4. 子类对象可以当做父类对象使用(类型兼容性原则、这也是产生多态的原因)。
    *类型兼容性原则
    (后面补充…)

继承方式对继承成员访问属性的影响

表1 父类成员访问级别 public protected private
继承方式 派生类成员属性
public public protected private
protected protected protected private
private private private private

1. c++中继承方式对子类成员访问成员的影响

  • public 继承:父类成员在子类中保持原有的访问级别
  • private继承:父类成员在子类中变成private成员
  • protected继承:父类public成员变成protected,父类protected成员仍然是protected属性,父类private成员仍然是private属性。

2.父类中的private成员在子类中依然存在,但是无法访问


继承中的构造与析构

类型兼容性原则(子类就是特殊的父类)

  • 子类对象可以直接当做父类使用
  • 子类对象可以直接赋值给父类对象
  • 子类对象可以直接初始化父类对象
  • 父类指针可以直接指向子类对象
  • 父类引用可以直接引用子类对象

注意:在进行上述5个操作之后,派生类(子类)只能使用从父类继承过来的成员。

请看下面的例子:

#include<iostream>
using namespace std;

class Parent//父类
{
public:
    Parent()
    {
        name = "parent";
    }
    void print()
    {
        cout << "name:" << name << endl;
    }
protected:
    const char* name;
private:
};

class Child:public Parent//子类
{
protected:
    int i;
public:
    Child(int i)
    {
        this->name = "child";
        this->i = i;
    }
};
int main()
{
    Child child(100);
    //类型(赋值)兼容型原则
    Parent p1(child);
    Parent *pp1 = &child;
    Parent &p = child;

    p1.print();
    pp1->print();
    p.print();
    return 0;
}

输出:
这里写图片描述

*类型兼容性原则是C++实现多态的基础。

猜你喜欢

转载自blog.csdn.net/Emptynest/article/details/70210185