64,637
社区成员
发帖
与我相关
我的任务
分享
class BASE
{
public:
BASE(): aa(293) {}
virtual void print() {cout<<"Hello\n";}
virtual void set() {aa = 103;}
int aa;
};
class Derived : private BASE //换成protected也一样
{
public:
//Derived(): BASE(103) {}
BASE* pr(Derived* d)
{
return d;
}
void set(){aa=39;}
void print(){;cout<<"World\n" << this->aa << endl;}
};
int main()
{
//BASE *p = new Derived;//为什么派生类的指针不能给基类
Derived dd;
BASE *p = dd.pr(new Derived); //这样就行,原先我理解。private继承,基类中的所有成员在派生类中为private访问
//编译器拒绝将 派生类的指针转换到基类。。是为了防止,用户调用在派生类中 已经是private基类的成员。。
//难道这不是派生类指针?
p->print();
cout << p->aa << endl;
p->set();
cout << p->aa;
}
class A
{
public:
A() {}
int a;
};
class B:A
{
public:
B() {}
int geta(B *p)
{
//编译能通过,是因为B具有对A的成员a的访问权限.
return p->a;
}
};
int main()
{
// A *a=new B;//wrong
// int a=(new B)->a;//wrong ,和上面一样的错误
int a=(new B)->geta(new B);// 和你那个能通过一样的道理.
//在 geta函数中, geta是B的成员函数.能够访问
}