如何构造基类函数
1)创建派生类对象时,程序先调用基类构造函数,然后再调用派生类的构造函数
2)如果没有指定基类构造函数,将使用基类的默认构造函数
3)可以使用初始化列表来指明要使用的基类构造函数
4)基类构造函数初始化被继承的数据成员;派生类的构造函数主要用于初始化新增的数据成员
5)派生类的构造函数总是调用一个基类的构造函数,包括拷贝构造函数
在基类的继承中:基类成员变量由基类的构造函数初始化,派生类新增的成员变量由派生类的构造函数初始化。先构造基类变量再构造派生类变量,先销毁派生类变量,再销毁基类变量。
基本上由三种构造函数:简单(默认)构造函数,带参数的构造函数,复制构造函数
它的语法就是:类名(): {} 注意用一个: 然后{里面是空的},后面没有分号
这是基类的构造函数
下面再是派生类的构造函数
派生类的构造函数,都是用初始化列表的方式来进行,因为基类的变量得由基类的构造函数进行构造
B(int a, int b, int c):A(a,b),m_c(c) {}
就是括号里面带参数 然后:后面写要选择使用的基类构造函数和对派生类变量的初始化赋值两部分。
然后在main函数里面可以选择 哪一种初始化
名字遮蔽和类作用域
如果派生类中的成员(包括成员变量和成员函数)和基类的成员重名,通过派生类对象或在派生类成员函数中使用该成员时,将使用派生类新增的成员,而不是基类的;
当基类和派生类的函数名一样的时候,并且基类的前面没有virtual 说明不是虚函数
那么派生类重新m_a= 30会重新开辟一块空间而不是将原来的空间覆盖掉,所以说这里是函数遮蔽而不是函数覆盖
把基类的函数遮蔽了所以调用的是派生类的成员函数。
多态
在原来的时候,基类指针可以指向派生类对象,但是只能调用基类的成员函数不能调用派生类新加的成员函数,而派生类的指针不能指向基类变量。
多态就是利用虚函数,基类的指针可以调用派生类的成员函数,基类指针表现出了多种形式,这种现象称为多态。
总结:多态就是利用虚函数让基类的指针可以调用派生类的成员函数
当没有利用多态的时候确实是 基类的指针只能调用 基类的成员函数
如果把基类的函数写成虚函数那么就可以调用派生类的函数了