关闭

第六周任务一

816人阅读 评论(0) 收藏 举报

下面的程序存在编译错误。有两种方法可以修改,请给出这两种修改方案,在报告中说明你倾向于用哪一种?为什么?处理此类问题的原则是什么?
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,没有在本质上解决问题,改动比较大;而解法二是在原作者的思维上改动,符合改错原理

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:63933次
    • 积分:1334
    • 等级:
    • 排名:千里之外
    • 原创:74篇
    • 转载:0篇
    • 译文:0篇
    • 评论:17条
    最新评论