C++ Inheritance
继承和派生 继承
:一个新类从已有的类那里获得其已有特性
已存在的类称为:
新建立的类称为-
派生:从已有的类产生一个新的子类 声明派生类
【继承就是继承已有特性,派生就是在继承的基础上加以修改,这样理解吧……】 继承是从子类角度来讲的,是说子类从父类中继承得到某些属性… 派生是从父类角度来讲的,是说父类派生出子类
子类的对象同时也可以是父类的对象。
父类的公有函数继承到子类是否还是公有要看继承方式(权限约束) 父类的变量(如 int a;)如果子类有相同的名字(int a;),就会被子类覆盖掉,就是说子类里面只有一个int a;【还是可以调用父类的a,但是调用方式不一样.】
其实是有的,调用方式要用域来标志,比如A派生出B,B里面就有两个变量a, 用B::a就是自己的,用A::a就是父类的
派生类不能继承:
基类的析构函数、构造函数 基类的赋值运算符基类的友元
派生类可以增加: 新的数据 新的成员函数
新的构造函数、析构函数 新的友元
C++访问控制-- private, public, protected
可以被以下访问
该类中的函数 其友元函数
PS。该类的对象也不能直接访问
可以被以下访问
该类中的函数 子类的函数 其友元函数
可以被以下访问
该类中的函数 子类的函数 其友元函数
通过该类的对象访问
继承方式
你要注意的就是,子类有子类自己的东西可以加进去,这个跟父类是不冲突的,是子类自己定义的,而从父类继承下来的属性服从下面的表格。
基类的私有成员不被继承 公有继承不改变属性
保护继承把基类的公有函数和保护函数改为保护 私有继承把基类的公有函数和保护函数改为私有
单继承和多继承 单继承:
多继承:
直接继承和间接继承 直接继承
Employee是HourlyWorker的直接继承 间接继承
Employee是MinuteWorker的间接继承
【就是类似祖孙是间接继承,父子是直接继承……】对…
函数重写
overriding:只用函数名做标志
重写是替换原有函数,重载是允许存在参数表不同的同名函数
fun被重写了
要访问Base中的fun()要通过
静态函数与非静态函数
【我理解的就是作用域的不同】
百度到的部分相关解释:
C++规定赋值运算符“=”只能重载为类的非静态成员函数,而不可以重载为类的友元函数。 不能重载为类的静态成员应该比较容易理解,因为静态成员函数是属于整个类的,不是属于某个对象的,它只能去操作类静态数据成员。而赋值运算符“=”是基于对象操作的。