vc高手们,帮我解决一下这个奇怪的问题!!!

来源:百度知道 编辑:UC知道 时间:2024/06/08 17:22:22
#include <iostream>
using namespace std;
class point
{
public:
void getx() {cout<<"good"<<endl;}
};
class rectangle:private point
{};
void main()
{
rectangle rect;
rect.getx();
}

这是一个最简单的类派生,但是因为是私有继承,所以程序编译时显示:rect不能在point 中访问getx();但书本上说肯定能访问;如果将private 改为public 则可以访问,用两个不同的编译器编译时都是这样,怎么回事?

上面的回答基于这种原因:对于一个类而言,其私有成员是不能直接被某个函数调用的,而你在使用class rectangle:private point后get()虽被继承,却成了rectangle的私有函数,是不可以在main()函数中直接调用的,因此需要借鉴使用私有数据成员的方法,构造一个public的函数,这样这个函数就可以间接调用私有的get()了,好好看书哦,这是很基础的东西。我也对代码做了调试修改如下,代码在GCC中编译通过(因为我用的GCC比较苛刻,所以补上了int main()和return 0;,这在VC6中无关大碍)

#include <iostream>
using namespace std;
class point
{
public:
void getx() {cout<<"good"<<endl;}
};
class rectangle:private point
{
public:void anotherget(){ void get();}//补上一个函数实现间接调用
};
int main()
{
rectangle rect;
rect.anotherget();//这个anotherget当然是可以直接在main()中调用了
return 0;
}

class point
{
public:
void getx() {cout<<"good"<<endl;}
};
class rectangle:private point
{
public:
void a(){
getx();//在这里访问
};
};
void main()
{
rectangle rect;
rect.a();
}