为何基类的函数无效呢

bjwqt 2011-06-22 03:17:53
为何基类的函数无效呢
func()基类有定义,派生类应该继承呀。
但是自从派生类定义了 func(int i)这个有参函数后,父类的func() 无参函数,就不能用了呀。
为什么呢?


#include <iostream>
using namespace std;
class Parent
{
public:
void func(void) { cout << "func of Parent" << endl; }
};

class Child : public Parent
{
public:

//void func(void)
//{
//cout << "func of Child" << endl;
//}

void func(int i)
{
cout << "i=" << i << endl;
}
};

void main()
{
Parent p;
Child c;
p.func();
c.func(); //为何调用无效,该函数在基类有定义呀
c.func(10);
}
...全文
274 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
至善者善之敌 2011-06-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bjwqt 的回复:]
引用 2 楼 iambic 的回复:

我记得effective c++里就提到这个问题了吧。
貌似设计初衷是防止你想覆盖基类方法的时候不小心写错参数(比如把unsigned int写成int)。可以在子类中use下。

就是这一句,还不是很明白。
[/Quote]


#include <iostream>
using namespace std;
class Parent
{
public:
void func(void) { cout << "func of Parent" << endl; }
};

class Child : public Parent
{
public:
using Parent::func; //这里
void func(int i)
{
cout << "i=" << i << endl;
}
};

void main()
{
Parent p;
Child c;
p.func();
c.func();
c.func(10);
}
还不明白,我就无语了
bjwqt 2011-06-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 iambic 的回复:]

我记得effective c++里就提到这个问题了吧。
貌似设计初衷是防止你想覆盖基类方法的时候不小心写错参数(比如把unsigned int写成int)。可以在子类中use下。
[/Quote]
就是这一句,还不是很明白。
ljt3969636 2011-06-22
  • 打赏
  • 举报
回复
还有哪不明白呢?
bjwqt 2011-06-22
  • 打赏
  • 举报
回复
up .
iambic 2011-06-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bjwqt 的回复:]
我的代码是隐藏,不是覆盖呀。
[/Quote]
我说的是设计的本意……不是说你真的在覆盖。
至善者善之敌 2011-06-22
  • 打赏
  • 举报
回复
你这个的确是隐藏,既然隐藏了,你要掉用就需要显示的来调用 c.Parent::func();
bjwqt 2011-06-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 iambic 的回复:]

我记得effective c++里就提到这个问题了吧。
貌似设计初衷是防止你想覆盖基类方法的时候不小心写错参数(比如把unsigned int写成int)。可以在子类中use下。
[/Quote]
我的代码是隐藏,不是覆盖呀。
yixueyixue12 2011-06-22
  • 打赏
  • 举报
回复
en.
xiaohuh421 2011-06-22
  • 打赏
  • 举报
回复
下断调试下,原因就在眼前了
無_1024 2011-06-22
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;
class Parent
{
public:
void func(void) { cout << "func of Parent" << endl; }
};

class Child : public Parent
{
public:

void func(void)
{
cout << "func of Child" << endl;
}

void func(int i)
{
cout << "i=" << i << endl;
}
};

void main()
{
Parent p;
Child c;
p.func();
c.Parent::func(); //为何调用无效,该函数在基类有定义呀
c.func(10);
}


iambic 2011-06-22
  • 打赏
  • 举报
回复
我记得effective c++里就提到这个问题了吧。
貌似设计初衷是防止你想覆盖基类方法的时候不小心写错参数(比如把unsigned int写成int)。可以在子类中use下。
xiaoguangzaia 2011-06-22
  • 打赏
  • 举报
回复
c.Parent::func();

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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