基类型引用有关问题
基类型引用问题本人最近看c++ primer遇到点问题:C/C++ code#includeiostreamusing namespace stdclass
基类型引用问题
本人最近看c++ primer遇到点问题:
C/C++ code#include<iostream>using namespace std;class Base{public: virtual void printtf() { cout<<i<<endl; cout<<"It's Base Method"<<endl; } Base():i('B'){} void display(const Base &a) { cout<<a.i<<endl; a.printtf(); }protected: int i;};class Derived:public Base {public: Derived():j('D'){} void printtf() { i=22; cout<<i<<endl; cout<<j<<endl; cout<<"It's Derived Method"<<endl; }protected: int j;};void oot(Base &it) { it.printtf();}int main(void){ Derived dd; Base *bb=&dd,b1; bb->printtf(); bb->Base::printtf(); oot(dd); return 0;}
编译出错,提示error C2662: “Base::printtf”: 不能将“this”指针从“const Base”转换为“Base &”就是oot函数中调用形参对象的printtf()函数出现错误,我看了primer中就是这么写的为何会出错呢?
[解决办法]你的函数参数为const类型。。所以必须把参数指向的成员函数定义为const类型。。具体代码如下
#include<iostream>
using namespace std;
class Base
{
public:
virtual void printtf()const
{
cout<<i<<endl;
cout<<"It's Base Method"<<endl;
}
Base():i('B'){}
void display(const Base &a) //
{
cout<<a.i<<endl;
a.printtf();
}
protected:
int i;
};
class Derived:public Base
{
public:
Derived():j('D'){}
void printtf()
{
i=22;
cout<<i<<endl;
cout<<j<<endl;
cout<<"It's Derived Method"<<endl;
}
protected:
int j;
};
void oot(Base &it)
{
it.printtf();
}
int main(void)
{
Derived dd;
Base *bb=ⅆ
bb->printtf();
bb->Base::printtf();
oot(dd);
return 0;
}
[解决办法]编译的时候会检查参数类型。
错误出现在:
void display(const Base &a)
{
cout<<a.i<<endl;
a.printtf();
}
参数是const Base类型的对象,const对象只能调用它的const成员函数。所以肯定不能调用printtf()函数了。
你把const删除掉,就对了。
[解决办法][解决办法]3楼正解..还有 你书上 绝对说这个问题了...我也正在看
[解决办法]const不要乱加
你只需要读某个变量时可以把它设成const
如果一个成员函数不需要修改调用它的对象也可以把函数设成const的
[解决办法]不能在printtf()后加const。因为Derived类中修改了i的值了。编译不过的~