标题:关于虚函数继承问题.
只看楼主
我不是郭靖
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:494
专家分:6
注 册:2006-10-4
 问题点数:0 回复次数:5 
关于虚函数继承问题.

#include<iostream>
using namespace std;

class base
{
public:
virtual void f1()
{
cout<<"f1 base"<<endl;
}
virtual void f2()
{
cout<<"f2 base"<<endl;
}
void f3()
{
cout<<"f3 base"<<endl;
}
};

class derive:public base
{
private:
void f1()
{
cout<<"f1 derive"<<endl;
}
void f2(int x)
{
cout<<"f2 derive"<<endl;
}
void f3()
{
cout<<"f3 derive"<<endl;
}
};

int main()
{
base ob1,*p;
derive ob2;
p=&ob1;
p->f1();
p->f2();
p->f3();
p=&ob2;
p->f1();
p->f2();
p->f3();
return 0;
}

为什么类derive的私有成员函数,也可以直接访问啊?

搜索更多相关主题的帖子: void 函数 base cout 
2006-10-12 10:31
qiuhai1985
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-10-9
得分:0 
不可以直接访问吧!!!
private:
void f1()
{
cout<<"f1 derive"<<endl;
}
void f2(int x)
{
cout<<"f2 derive"<<endl;
}
void f3()
{
cout<<"f3 derive"<<endl;
}
};
那个private应该是public

编织美好得未来!!! COME ON SEA!!!
2006-10-12 14:45
我不是郭靖
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:494
专家分:6
注 册:2006-10-4
得分:0 
可以啊,你看我主函数里写的.

int main()
{
base ob1,*p;
derive ob2;
p=&ob1;
p->f1();
p->f2();
p->f3();
p=&ob2;
p->f1();
p->f2();
p->f3();
return 0;
}

2006-10-12 19:59
huangtian
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-10-10
得分:0 
应该是因为其将子类的对象成员的地址赋了父类的指针,从而使得该指针具体化成了子类的成员指针,所以能访问private也就成了理所当然的了.(个人看法,仅供参考!)

2006-10-13 10:48
眼底星空
Rank: 4
等 级:业余侠客
威 望:3
帖 子:85
专家分:289
注 册:2006-9-2
得分:0 
只有这样解释:多态性与将实现多态的函数的访问限定符没有任何关系

无为而为 && 每天进步一小点...
2006-10-13 20:00
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
得分:0 
不可以的,但能访问f1,因为派生类derive中的f1()有对基类的f1()重载,而f2(),f3()没有,注意derive的f2(int x)与f2()的区别
p=&ob2;
p->f1();//这里通过对象的虚函数表找到derive的f1(),所以输出f1 derive
p->f2();// 这里只调用 基类 f2 base
p->f3();// .... f3 base

2006-10-13 21:41



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-95753-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055382 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved