关于C++的同名覆盖原则的问题

classA{public:voidfun1(long){/*...*/}virtualvoidfun2(char)=0;};classB:publicA{public:... class A
{
public:void fun1(long){/*...*/ }
virtual void fun2(char) = 0;
};
class B :public A
{
public:void fun1(){/*...*/ }
void fun2(char){/*...*/ }
};
int main()
{
A *p = NULL;
B b;
*p = b;
b.fun1(100);
}
这个为什么属于同名覆盖呢?同名覆盖不应该参数类型和函数名都相同吗?但基类有个LONG,明显和派生类不一样?为什么属于同名覆盖。。
展开
 我来答
_whales
2015-04-16 · TA获得超过2279个赞
知道大有可为答主
回答量:1814
采纳率:85%
帮助的人:511万
展开全部
同名,会隐藏基类的函数的。
继承的重载原则是,要么不重载(改写),
要么完全重载(改写),不允许,只重载一部分。
不过可以用 using 指令等方法,明确说明,派生类继承基类的同名同参函数
然后,改写或者添加不同参数不同签名的其它同名函数
另外注意,同名的友元函数和成员函数(主要指的是运算符重载),不需要都重载,只需要友元或者成员

注意非虚函数和虚函数的不同含义。公有继承和私有继承的不同含义。
Storm代理
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I... 点击进入详情页
本回答由Storm代理提供
帐号已注销
2015-04-16 · TA获得超过3954个赞
知道大有可为答主
回答量:1636
采纳率:77%
帮助的人:1244万
展开全部
如果基类的同名函数不是虚函数,在派生类中一律被覆盖。

你的代码是不能编译通过的,因为B类定义的函数fun1覆盖了基类的同名函数fun1,所以派生类对象是无法调用基类的fun1( long )的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式