C++纯虚const成员函数

51

如何声明一个既是纯虚函数又是const成员函数?我可以这样做吗?

virtual void print() = 0 const;

还是像这样?

virtual const void print() = 0;

12
我猜测virtual void print() const = 0;的意思是定义一个纯虚函数print,该函数没有实现并且不能被调用,只能被子类继承并实现。这个函数是虚函数,并带有const限定符,表示该函数不会修改成员变量的值。 - chris
请参考这个Stack Overflow链接:https://dev59.com/umkx5IYBdhLWcg3wCP2Y - Richard Chambers
4个回答

69

来自Microsoft Docs:

要声明常量成员函数,请在参数列表的右括号后放置const关键字。

因此应该这样写:

virtual void print() const = 0;

"= 0" 是用来初始化变量的。 - gudé

21
只有virtual void print() const = 0形式是可接受的。请查看C++03 §9/2中的语法规范: member-declarator: declarator pure-specifieropt declarator constant-initializeropt identifieropt : constant-expression

pure-specifier:
    = 0

constdeclarator的一部分-它是direct-declarator中的cv-qualifier-seqopt(§8/4): declarator: direct-declarator ptr-operator *declarator* direct-declarator: declarator-id direct-declarator ( parameter-declaration-clause ) cv-qualifier-seqopt exception-specificationopt direct-declarator [ constant-expressionopt ] ( declarator ) 因此,= 0必须在const之后。

我更喜欢这个答案,因为它涉及到 C++ 规范,而不是微软的规范。 - ErniBrown

6
当然可以。正确的语法是:
virtual void print() const = 0;

4

试试这个:

 virtual void print()  const = 0;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接