派生类转为基类的三种常用方式
1、派生类对象给基类对象赋值
2、派生类对象初始化基类对象的引用
3、令基类的指针指向派生类对象
#include<iostream>
using namespace std;
class Shape{ //基类
public:
void draw(){
cout << "Draw something." << endl;
}
};
class Line:public Shape //派生类
{
public:
void draw(){
cout << "Draw a line." << endl;
}
};
class Circle:public Shape //派生类
{
public:
void draw(){
cout << "Draw a circle." << endl;
}
};
int main(){
Shape *p,obj; //基类对象指针和基类对象
Line L1;
obj = L1; //用Line类对象给Shape类对象赋值
obj.draw();
Shape &p1 = L1; //以Line类对象初始化Shape类引用
p1.draw();
p = &L1; //用Line类对象地址给基类指针赋值
p -> draw();
p = new Circle; //用Circle类对象地址给基类指针赋值
p -> draw();
return 0;
}
运行结果
代码分析
第一行:直线类对象L1对基类对象obj赋值,而后通过obj调用draw函数
第二行:直线类对象L1初始化基类引用p1后,通过p调用draw函数
第三行:直线对象L1地址赋值给基类指针p,再通过p调用draw函数
第四行:令p指向动态生成的子类Circle对象再通过p调用draw函数,输出第四行
结论
利用赋值、引用或指针的形式将派生类对象转换为基类对象后,只能当作基类对象使用。不论派生类是否存在同名的成员函数,这样得到的基类对象所访问的成员都是来自基类