通常用一个专门的抽象类作为封装的接口类来操作子类,抽象类不能实例化,只能指针操作子类的对象。
通过赋值,也就是接口的指针指向子类实例化对象的内存块。
编译器通过指针来访问成员变量,指针指向哪个对象就使用哪个对象的数据;编译器通过指针的类型来访问成员函数,指针属于哪个类的类型就使用哪个类的函数(多态除外,多态是通过查虚表来进行操作的)。
例子如:
class father
{
public:
father(int a){m_a = a;};
public:
void func();
virtual void vfunc() = 0;
private:
int m_a;
};
class sun:public father
{
public:
sun(int a,int b);
public:
void func();
void vfunc();
private:
int m_b;
};
void father::func()
{
cout<<"father : func m_a="<<m_a<<endl;
return;
}
//void father::vfunc()
//{
// cout<<"father : vfunc"<<endl;
// return;
//}
sun::sun(int a,int b):
father(a),m_b(b)
{
};
void sun::func()
{
cout<<"sun : func"<<endl;
return;
}
void sun::vfunc()
{
cout<<"sun : vfunc m_b"&l