免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7169 | 回复: 11
打印 上一主题 下一主题

c++中被覆盖的基类函数必须用virtual修饰吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-15 23:45 |只看该作者 |倒序浏览
c++中要实现用派生类的函数f(int)覆盖基类中的同名函数f(int),那么基类中的f(int)必须是虚函数吗?求各位大侠指点

论坛徽章:
0
2 [报告]
发表于 2011-08-16 09:02 |只看该作者
这个取决于基类的f(int)是怎么声明的。如果基类中声明为virtual了,那么派生类中依然为virtual。否则就是覆盖。

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
3 [报告]
发表于 2011-08-16 09:39 |只看该作者
基类不是virtual的话,不应该覆盖。

论坛徽章:
0
4 [报告]
发表于 2011-08-16 12:34 |只看该作者
回复 3# ecjtubaowp
不是覆盖  那应该是什么?  是不是传说中的“隐藏”?

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
5 [报告]
发表于 2011-08-16 13:33 |只看该作者
回复 4# ula_w


    是覆盖了。我是说如果基类不是virtual,不应该这么去设计。

论坛徽章:
0
6 [报告]
发表于 2011-08-16 15:53 |只看该作者
本帖最后由 jiayanfu 于 2011-08-16 15:54 编辑

回复 1# ula_w


    如果不是virtual的话,貌似会悲剧。。。函数理论上应该不会被覆盖,测试表明确实不被覆盖。。。这样子会失去多态的含义。。。

论坛徽章:
0
7 [报告]
发表于 2011-08-16 17:00 |只看该作者
关键是对C++基础知识的深层次理解;
      知道了C++编译器对虚函数和普通函数的处理的区别,就很容易解答这个问题了!

论坛徽章:
0
8 [报告]
发表于 2011-08-16 17:05 |只看该作者
不用virtual子类函数应该会覆盖父类,无法用子类作用域调用父类的函数

论坛徽章:
0
9 [报告]
发表于 2011-08-16 17:21 |只看该作者
不用virtual子类函数应该会覆盖父类,无法用子类作用域调用父类的函数
gaomingok 发表于 2011-08-16 17:05



class A
{
public:
      A()
          {
          }
      virtual ~A()
          {
          }

     int f()
     {
           printf("A !\n";
                   return 0;
     }
};

class B : public A
{
public:
      B()
          {
          }
      ~B()
          {
          }
};

class C : public A
{
public:
      C()
          {
          }
      ~C()
          {
          }

    int f()
    {
           printf("C !\n";
                   return 3;
     }
};


int main(int argc, char* argv[])
{
        B* pobjB=new B();
        pobjB->f();
        delete pobjB;

        return 0;
}


你说这个是覆盖呢还是不覆盖呢!
还是那句话,理解了就知道怎么回事了!

论坛徽章:
0
10 [报告]
发表于 2011-08-18 10:40 |只看该作者
回复 9# davidfoxhu


    这个是覆盖
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP