/*指向子类对象的父类指针访问父、子类成员的权限问题*/
/* 继承中:使用指向对象的指针访问类成员时与使用对象直接访问类成员的访问权限和成员隐藏情况是不一样的。
··使用对象直接访问成员时,继承来的子父类成员都可以访问;子父类中有同名成员时,子类一定覆盖父类。··
··使用指向子类的父类指针时,只可直接访问的是父类成员,基类成员函数前加virtual且子类中有同名函数时才会使用子类的该成员函数。··*/
#include <IOSTREAM>
using namespace std;
class father
{
public://公有成员是对象(包括指向对象的指针)唯一可以直接访问的成员。
virtual void fout(){cout<<"父类成员函数fout"<<endl;}
virtual void thesame(){cout<<"父类成员函数thesame"<<endl;}
void out(){cout<<"父类成员函数out"<<endl;}
// virtual void out(){cout<<"父类成员函数out"<<endl;}//不可与上一函数同时出现;可见virtual不像const,不是个数据类型。
int k;
private:
int i;
};
class son :public father
{
public:
void sout(){cout<<"子类成员函数sout"<<endl;}
void thesame(){cout<<"子类成员函数thesame"<<endl;}
void out(){cout<<"子类成员函数out"<<endl;}
int k; //在继承中,成员变量和成员函数的调用规则相同。
private:
int j;
};
void main()
{
father * p = new son;
son a;
father * p1 = &a;//p、p1都是指向子类对象的指针,只是一个指向堆区,一个指向栈区;
C++中指向子类的父类指针访问父、子类成员时的权限和函数隐藏规则
最新推荐文章于 2024-06-29 09:14:23 发布