继承时候相同函数名 不能重载么

aj3423 2013-09-14 08:24:21
struct base {
void set(int, char){}
};
struct derive : base {
void set(int, int, long) {} //定义了这个,父类的set就没了? 不能像普通函数那样重载么
};
int main() {
derive d;
d.set(2,'a');
}
...全文
106 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
SmallCoder1992 2013-09-15
  • 打赏
  • 举报
回复
这个你可以在Derived中这么声明,using Base::set;这样你就可以使用了,这样基类中的函数就可以用了,不会被屏蔽
SmallCoder1992 2013-09-15
  • 打赏
  • 举报
回复
如果你想使用基类的同名函数,你可以使用using声明,using 基类函数名,这样可以实现
SmallCoder1992 2013-09-15
  • 打赏
  • 举报
回复
你需要注意的是重载的要求是作用域相同,你在继承类中的同名字函数不在base类中,你可以看看这几个名词的含义:隐藏,重载,重写;这几个的解释可以帮你理解
  • 打赏
  • 举报
回复
引用 4 楼 aj3423 的回复:
struct base {
	void set(int, char){}
};
struct derive : base {
	using base::set;//貌似加这个就好了
	void set(int, int, long) {}
};
int main() {
	derive d;
	d.set(2,'a');
	d.set(2,2,2);
}
是哈,搞不懂,C++为什么要这样设计,为什么基类和派生类中使用同一名字的成员函数,其行为与数据成员一样:在派生类作用域中派生类成员将屏蔽基类成员。即使函数原型不同,基类成员也会被屏蔽。 C++这样设计,出于什么样的语意,或有什么难言之隐。。。。
signforlin 2013-09-14
  • 打赏
  • 举报
回复
3,4楼的情况在Effective C++中第33条有详细说明。
aj3423 2013-09-14
  • 打赏
  • 举报
回复
struct base {
	void set(int, char){}
};
struct derive : base {
	using base::set;//貌似加这个就好了
	void set(int, int, long) {}
};
int main() {
	derive d;
	d.set(2,'a');
	d.set(2,2,2);
}
  • 打赏
  • 举报
回复
只能曲线求国了

struct base {
    void set(int, char){}
};
struct derive : base {
    void set(int, int, long) {} //定义了这个,父类的set就没了? 不能像普通函数那样重载么
    void set(int, char){
      base::set(int,char);
    }
};
int main() {
    derive d;
    d.set(2,'a');
}
aj3423 2013-09-14
  • 打赏
  • 举报
回复
有没办法 parent和derive有两个函数(相同的函数名,只是参数不同) derive可以同时调用两个函数?
jiht594 2013-09-14
  • 打赏
  • 举报
回复

derive d;
d.base::set(2,'a');
基类同名函数被“隐藏”了。

65,187

社区成员

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

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