下面的程序存在编译错误。有两种方法可以修改,请给出这两种修改方案,在报告中说明你倾向于用哪一种?为什么?处理此类问题的原则是什么?
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");
}
在定义对象时指定对象为常对象
定义形式:1 类名 const 对象名[(实参列表)];
2 const 类名对象名[ (实参列表)];
解法一:
问题出在:如果一个对象被声明为常对象,则不能调用该对象的非const型的成员函数
改:把定义常变量改为一般变量
#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); //去掉 const
cout << c.getX();
system ("PAUSE");
}
解法二:
一个对象被声明为常对象,不能调用该对象的非const型的成员函数,那么只需要将该成员函数声明为 const即可
#include <iostream>
using namespace std;
class C
{
private:
int x;
public:
C( int x )
{
this -> x = x;
}
int getX() const // 将函数声明为 const
{
return x;
}
};
void main ()
{
const C c(5);
cout << c.getX();
system ("PAUSE");
}
我更倾向解法二
解法一是在逃避const,没有在本质上解决问题,改动比较大;而解法二是在原作者的思维上改动,符合改错原理