关于基类成员函数的调用,有点疑问,谢谢指教!

qinqinluoluo 2009-03-24 07:52:36
#include<iostream.h>
class C0
{
protected:
void print1()
{
cout<<"C0 print1"<<endl;
}

public:
void print2()
{
cout<<"C0 print2"<<endl;
}
};
class C1: public C0
{
public:
C0::print1;//在这里是要调用基类C0中的函数print1;为什么要这样写,而不是写成C0::print1();
};
void main()
{
C1 obj;
obj.print1();
obj.print2();
}

程序运行正确。
...全文
132 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fairchild811 2009-03-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 deerwin1986 的回复:]
首先 这里不是一个函数调用 是作用域说明 正确的使用方法应该是using C0:print1;
也就是把基类中的保护成员在公共域中声明出来 也就是传说中的保护成员的不安全性...
如果在后面加括号 编译器会认为你要定义一个函数覆盖基类中的同名函数 然后当然会提示你没有定义拉 没有返回值之类的...
[/Quote]

是的,相当于是using CO::print1;

不然的会被看成函数声明,而不是调用
deerwin1986 2009-03-24
  • 打赏
  • 举报
回复
首先 这里不是一个函数调用 是作用域说明 正确的使用方法应该是using C0:print1;
也就是把基类中的保护成员在公共域中声明出来 也就是传说中的保护成员的不安全性...
如果在后面加括号 编译器会认为你要定义一个函数覆盖基类中的同名函数 然后当然会提示你没有定义拉 没有返回值之类的...
  • 打赏
  • 举报
回复
没见过这样用的。。也没什么意义啊
mengde007 2009-03-24
  • 打赏
  • 举报
回复
大哥!改错题!早说嘛、
yangch_nhcmo 2009-03-24
  • 打赏
  • 举报
回复

lass C1: public C0
{
public:
C0::print1;//这里是给出CO::printf1的调用地址吧,CO::printf1被声明为protected,外部无法访问,这里提供一个接口.纯属个人理解,请高手指正
};
qinqinluoluo 2009-03-24
  • 打赏
  • 举报
回复
这不是我造的,这是一个考试题里的改错题。就是把C0::print1(); 改为C0::print1;这样程序就可以正确运行了
mengde007 2009-03-24
  • 打赏
  • 举报
回复
没见过,LZ是自己造的吧。
fox000002 2009-03-24
  • 打赏
  • 举报
回复
这种语法很诡异啊

不知应该称为什么?
liqinghua1653 2009-03-24
  • 打赏
  • 举报
回复
这里是函数调用吗, 函数调用怎么可以直接类里面, 起码要写到函数中吧。
这里我觉得是吧C0::print1函数重新声明为public,在C0里面是protected, 不能在外面直接调用的

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧