我正在阅读Essential C ++。在4.3节中,作者给出了一个例子 解释 const
的用法class val_class {
public:
val_class(const BigClass &v)
: _val(v) {}
const BigClass& val() const {return _val;}
BigClass& val() {return _val;}
};
void example(const BigClass *pbc, BigClass &rbc)
{
pbc->val();
rbc.val();
}
在上面的代码段中,作者基于constness重载函数val。
然后pbc->val()
将调用const实例,rbc.val()
将调用非const实例。
pbc 是 BigClass 类型的const指针。我们如何保证 BigClass 具有成员函数 val ?是否应在示例函数中用 val_class 替换 BigClass ?
答案 0 :(得分:2)
这显然只是书中的一个错字。正如您自己想象的那样,example
函数应如下所示
void example(const val_class *pbc, val_class &rbc)
{
pbc->val();
rbc.val();
}
答案 1 :(得分:0)
必须替换,因为BigClass
无法从val_class
派生val_class
无法将reference
或const-reference
存储到BigClass
对象,因为代码在这种情况下不会编译,因此它只能存储BigClass
个对象,然后BigClass
无法从val_class
派生,因为无法存储未声明/非完整声明类型的对象。