版权声明:文章只是自己学习的记录,本人不能保证全部正确。希望大神多多指点,帮助菜鸟进步。 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 | 父类成员访问级别 | 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++实现多态的基础。