您的位置:首页 > 编程语言 > C语言/C++

c++作业,带默认参数的成员函数

2013-03-28 09:43 218 查看
题目来源于:/article/1353382.html

【项目2】C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理虚数的),再如分数。本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,二则也为第10章做运算符重载等积累些感性认识。

  项目要求:完成下面类的设计,并在main()函数中自行定义对象,调用各成员函数,完成基本的测试。

class CFraction
{private:
	int nume;  // 分子
	int deno;  // 分母
 public:
	CFraction(int nu=0,int de=1);   //构造函数,初始化用
	void set(int nu=0,int de=1);    //置值,改变值时用
	void input();				//按照"nu/de"的格式,如"5/2"的形式输入
	void simplify();				//化简(使分子分母没有公因子)
	void amplify(int n);			//放大n倍,如2/3放大5倍为10/3
	void output(int style=0);		//输出:以8/6为例,style为0时,原样输出8/6;
								//style为1时,输出化简后形式4/3;
								//style为2时,输出1(1/3)形式,表示一又三分之一;
								//style为3时,用小数形式输出,如1.3333;
								//不给出参数和非1、2,认为是方式0
};




然后自己针对项目2写了一下程序,途中遇到了一个问题。以前接触过带默认实参的构造函数,但这是自己第一次接触到带默认实参的成员函数,有点显得措手不及,总是被提示:'output':redefinition of default parameter:parameter 1

see declaration of 'output'.



然后自己上网查了查,其实这个也简单,就是如果你在声明中包含有默认实参的话,在定义的时候不要加默认实参就可以了;并且,如果声明中没有加上的话,在定义的时候加上也是可以的。

参考资料来源:http://blog.csdn.net/yuxmdef1/article/details/6799120

以下是通过了编译的代码。有时候很多东西都以为自己懂,写起来的时候各种毛病就显现了。

#include <iostream>
using namespace std;

class CFraction
{private:
	int nume;  // 分子
	int deno;  // 分母
 public:
	 CFraction(int nu=0,int de=1):nume(nu),deno(de){}   //构造函数,初始化用

	void set(int nu=0,int de=1) { nume = nu; deno = de; }    //置值,改变值时用

	void input();				    //按照"nu/de"的格式,如"5/2"的形式输入

	void simplify();				//化简(使分子分母没有公因子)

	void amplify(int n);            //放大n倍,如2/3放大5倍为10/3

	void output(int style);

	
	                                //输出:以8/6为例,style为0时,原样输出8/6;
								    //style为1时,输出化简后形式4/3;
								    //style为2时,输出1(1/3)形式,表示一又三分之一;
								    //style为3时,用小数形式输出,如1.3333;
								    //不给出参数和非1、2,认为是方式0
};

//CFraction::CFraction(int nu =0,int de=1) { nume = 0; deno =1; }
//void CFraction::set(int nu=0,int de=1) { nume = 0; deno =1; }

void CFraction::input() 
{ 
	char cvar;
	cin>> "按照5/2格式输入"  >> nume >> cvar >> deno;
}

void CFraction::simplify()
{
	int v1 = nume;
	int v2 = deno;
	while(v2)
	{
		int temp = v2;
		v2 = v1 % v2;
		v1 = temp;
	}
	nume /= v1;
	deno /= v1;
}

void CFraction::amplify(int n)
{
	nume *= n;
}

void CFraction::output(int style=0)
{
		if(style == 1)  { simplify(); cout << nume << '/' << deno; cout << endl; }
		else if(style == 2)  { simplify(); cout << nume/deno << '(' << nume-deno << '/' << deno << ')'; cout << endl; }
		else if(style == 3) { cout << (double)nume/deno; cout << endl; }
		else { cout << nume << '/' << deno;  cout << endl; }
}

int main()
{
	CFraction cf1;
	cf1.output();
    
	cf1.set(8,6);
    cf1.output();
	cf1.output(1);
	cf1.output(2);
	cf1.output(3);

	CFraction cf2(2,3);
	cf2.output();
	cf2.amplify(2);
	cf2.output();

	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: