首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

基类型引用有关问题

2012-08-01 
基类型引用问题本人最近看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=&dd;

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删除掉,就对了。
[解决办法]
探讨

编译的时候会检查参数类型。
错误出现在:
void display(const Base &amp;a)
{
cout<<a.i<<endl;
a.printtf();
}
参数是const Base类型的对象,const对象只能调用它的const成员函数。所以肯定不能调用print……

[解决办法]
3楼正解..还有 你书上 绝对说这个问题了...我也正在看
[解决办法]
const不要乱加
你只需要读某个变量时可以把它设成const
如果一个成员函数不需要修改调用它的对象也可以把函数设成const的

[解决办法]
不能在printtf()后加const。因为Derived类中修改了i的值了。编译不过的~

热点排行