实验目的:下面的程序存在编译错误,有两种方式可以修改,请给出这两种修改方案。
有问题的源代码:
#include <iostream>
using namespace std;
class C
{
private:
int x;
public:
C(int x){this -> x = x;}
int getx(){return x;}
};
void main()
{
const C c(5);
cout << c.getx();
system("pause");
}
编译错误:
error C2662: 'getx' : cannot convert 'this' pointer from 'const class C' to 'class C &'
Conversion loses qualifiers
第一种订正方式:
#include <iostream>
using namespace std;
class C
{
private:
int x;
public:
C(int x){this -> x = x;}
int getx(){return x;}
};
void main()
{
C c(5);
cout << c.getx();
system("pause");
}
第二种订正方式:
#include <iostream>
using namespace std;
class C
{
private:
int x;
public:
C(int x){this -> x = x;}
int getx() const {return x;}
};
void main()
{
const C c(5);
cout << c.getx();
system("pause");
}
个人感觉:
在定义对象时指定c为常对象,则对象c中的所有数据成员的值都不能被修改,所以如果希望保证数据成语不被改变的对象,可以声明为常对象,此时自然第二种订正方式更好。