首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于C++中const和virtual关键字的位置,什么是好的约定(或要求)?

对于C++中const和virtual关键字的位置,什么是好的约定(或要求)?
EN

Stack Overflow用户
提问于 2012-06-17 09:41:26
回答 1查看 95关注 0票数 0

我知道,如果虚拟关键字覆盖了虚拟基函数,那么在派生类成员函数声明中不需要重新使用它,但这样做是否可以清楚地表明它是虚拟的?另外,在声明和/或定义中出现const关键字又如何呢?我想Alexandrescu提到了这件事,但我想不起来是什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-17 10:01:54

你的问题似乎很混乱。当覆盖基类方法时,virtual是可选的。如果需要,const永远不是可选的。这并不像您认为的那样:

代码语言:javascript
复制
struct A
{
  virtual void Func() const;
};

struct B : public A
{
  virtual void Func();
};

结构B有两个名为Func的函数。其中一个将在被调用的对象为const时被调用,另一个将在非const时被调用。这段代码中没有任何内容被覆盖;这是两个独立的虚函数。

您不能忽略const并期望一切都能正常工作。

实际上,这个例子还说明了为什么在派生类中重写时应该使用virtual。在这种情况下,很明显您打算覆盖一个基类函数,但是您得到了错误的函数签名。如果没有virtual,就不会立即显示您打算重写某些内容。

它不是一个很大的帮助,但它是一些东西。

C++11使用override伪关键字提供了一个更好的解决方案(因为它实际上解决了这个问题)。

代码语言:javascript
复制
struct A
{
  virtual void Func() const;
};

struct B : public A
{
  virtual void Func() override; //Gives a compiler error, since it is not overriding a base class function.
};
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11068319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档