--知识点1
派生类引用基类的函数时要声明基类并用作用域运算符加以明示,例如:
class Cylinder:public Circle{
double XX;
public:
Cylinder(double x):XX(x);
double geth() const {return 2*Circle::area()...;}//引用了基类圆类的面积函数 Circle::area()
--知识点2 派生类对象转换为基类对象
1.将派生类对象赋给基类对象:
因为派生类中包含了基类的对象的全部属性,故可以直接将派生类的对象赋值给基类的对象,该基类对象会舍弃派生类的属性而只保留派生类的基类属性;
2.基类指针指向派生类对象:
当让一个基类指针指向派生类对象的时候由于其本身是一个基类的指针,它只能解释基类的成员,而不能解释派生类新增的成员,因此只能访问基类的属性;
3.基类的对象引用派生类的对象:
引用是一种隐式的指针,因此当基类的对象引用派生类的对象时相当于基类的指针指向派生类的对象,该指针只能访问派生类的基类属性;
son是base类的派生类:
son d;
base *p=&d;
对指针p只能访问d的基类属性;
son d,*p1;
base *p2=&d;
若执行 p1=p2 编译器会报错:派生类的指针的地址里应该含有派生类的所有属性,而让基类指针指向派生类的空间则会报错,总结来说就是指针指向空间的数据类型有区别。