前言 C++ 学习路线,本人主要也是为了记录一下自己的学习过程
目录
一、继承
1、继承
class A: B
默认为private 私有继承 ,不能调用父类的public方法
B是基类,A称为子类或者派生类
2、多继承
一个子类可以有多个父类,它继承了多个父类的特性。
class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
亲注意 java语法不支持多继承的但C++支持
二、多态
多种形态 当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态
> 静态多态(静态联编)是指在编译期间就可以确定函数的调用地址,通过**函数重载**和**模版(泛型编程)**实现
> 动态多态(动态联编)是指函数调用的地址不能在编译器期间确定,必须需要在运行时才确定 ,通过**继承+虚函数** 实现
class Parent {
public:
void test() {
cout << "parent" << endl;
}
};
class Child :public Parent {
public:
void test() {
cout << "child" << endl;
}
};
Parent *c = new Child();
// 编译期间 确定c 为 parent 调用parent的test方法
c->test();
//修改Parent为virtual 虚函数 动态链接,告诉编译器不要静态链接到该函数
virtual void test() {
cout << "parent" << endl;
}
//动态多态 调用Child的test方法
c->test();
三、纯虚函数
class Parent {
public:
//纯虚函数 继承自这个类需要实现 抽象类型
virtual void test() = 0;
};
class Child :public Parent {
public:
void test(){}
};
四、总结
> 构造函数任何时候都不可以声明为虚函数
> 析构函数一般都是虚函数,释放先执行子类再执行父类
1 成员函数重载特征:
a 相同的范围(在同一个类中)
b 函数名字相同
c 参数不同
d virtual关键字可有可无
2 重写(覆盖)是指派生类函数覆盖基类函数,特征是:
a 不同的范围,分别位于基类和派生类中
b 函数的名字相同
c 参数相同
d 基类函数必须有virtual关键字
3 重定义(隐藏)是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
a 如果派生类的函数和基类的函数同名,但是参数不同,此时,不管有无virtual,基类的函数被隐藏。
b 如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有vitual关键字,此时,基类的函数被隐藏。