把子类的对象当作父类来看待:如果对象B是对象A的子类,那么对象B可以当作对象A来使用。
#include<iostream>
using namespace std;
class A{
public://public private可以写多个
int i;
public:
A():i(10) {}
};
class B:public A{
private:
int j;
public:
B():j(30){ }
void f() {cout<<"B.j="<<j<<endl;}
};
int main(){
A a;
B b;
cout<<a.i<<" "<<b.i<<endl;//10 10
cout<<sizeof(a)<<" "<<sizeof(b)<<endl;// 4 8 没有函数,只有成员变量
int *p=(int*)&a;
cout<<p<<" "<<*p<<endl;//a的地址 10
*p=20;
cout<<a.i<<endl; //20
p=(int*)&b;
cout<<p<<" "<<*p<<endl;//b的地址(与a的地址不同,这是两个不同的对象) 10
p++; //改变b的地址
*p=50;
b.f(); //B.j=50
return 0;
}
向上构造:(upcasting)把子类对象当作父类来看待。
Manager pete("Pete","444-55-6666","Bakery");
Employee* ee=&pete;//Upcast 指针
Employee& er=pete;//Upcast 引用