C#太多而C ++太少让我头晕目眩......有人能提醒我这个c ++声明是什么意思吗?具体来说,结尾是“const”。非常感谢。
protected:
virtual ostream & print(ostream & os) const
答案 0 :(得分:10)
const
方法只会收到const
this
指针。
在这种情况下,this
指针将属于const ThisClass* const
类型,而不是通常的ThisClass* const
类型。
这意味着无法从const
方法内修改成员变量。甚至不能从这样的方法调用非const
方法。但是,成员变量可以声明为mutable
,在这种情况下,此限制将不适用于它。
因此,当您拥有const
对象时,编译器允许您调用的唯一方法是const
关键字标记为安全的方法。
答案 1 :(得分:4)
结尾const
意味着print
函数不应该能够改变它所声明的类的任何成员的状态(因此不能调用它的任何成员函数)未声明为const
)的类。
在下面的示例中,类print
中的Foo
函数无法更改Foo
的任何成员变量(除非它们被声明为mutable
),并且不能调用Foo
中的任何非const函数。
class Foo {
public:
Foo(string value) { m_value = value; }
protected:
ostream & print(ostream & os) const {
m_value = string("foobar"); // won't compile
os << m_value;
return os;
}
private:
string m_value;
};
答案 2 :(得分:3)
方法声明中的const
告诉编译器该函数可以安全地调用该函数所属类型的const对象。它还向编译器发出信号,表明该函数不应该改变对象的状态,并且它将无法更改任何未标记为mutable
的成员变量。
如果省略const,则此代码不起作用:
const Foo bar;
bar.print(std::cout); // Will fail to compile unless 'print' is marked const
答案 3 :(得分:1)
您正在声明一个名为print
的受保护虚拟方法,该方法将参数作为对ostream的引用,并返回对ostream的引用。
const关键字表示该方法无法改变对象的状态,this
指针将为const。
虚方法是一种方法,其行为可以在继承类中被覆盖,基本上虚拟关键字使C ++具有支持多态的能力。
最后如果您不知道什么是参考go there
来自C#,我想你知道受保护意味着什么:)