且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

C++程序设计-第5周 用构造函数初始化

更新时间:2022-09-20 09:30:11

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565


看完书再做发现很简单,只是自己一开始就产生了畏惧心理。——一位正在进步的同学这样总结

这句话让我很有感触。这就是成长,这句话是留给有心人自己说出来的。——迂者感到很欣慰


【项目1】设计三角形类,通过增加构造函数,使对象在定义时能够进行初始化

#include<iostream>
using namespace std;
class Triangle
{public:
	double perimeter(void);//计算三角形的周长
	double area(void);//计算并返回三角形的面积
	void showMessage();
private:
	double a,b,c; //三边为私有成员数据
};


void Triangle:: showMessage()
{
	cout<<”三角形的三边长分别为:”<<a<<'\t'<<<<b<<<<'\t'<<<<c<<endl;
	cout<<"该三角形的周长为:"<< perimeter()<<'\t'<<"面积为:"<< area()<<endl<<endl;
}


void main(void)
{
	Triangle Tri1;	//定义三角形类的一个实例(对象),要求执行一个默认构造函数,三边初值均为1
	Tri1.showMessage();
	Triangle Tri2(7,8,9);	//定义三角形类的一个实例(对象)
	Tri2.showMessage();
}

  特别要求:为全面体会构造函数的各种写法,本任务要求提交多个版本的程序,体现出你已经掌握下列知识点(带参数构造函数、默认构造函数、有默认参数的构造函数、参数初始化表,先将这些个概念看书了解了。):
  (1)使用带参数构造函数,即Triangle(double x, double y, double z),三边长在调用时由实参直接给出;
  (2)设计默认构造函数,即不指定参数时,默认各边长为1;
  (3)使用有默认参数的构造函数,不给定实参时,默认边长为1;
  (4)在构造函数中使用参数初始化表对数据成员初始化。
【项目1拓展(选做)】请自行设计一个矩形类,可以计算矩形的面积、周长、对角线,判断是否是正方形。请用上类似的构造函数,自己设计main()函数,对设计的类进行测试。


【项目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拓展1(选做)】上面output(int style=0)中的输出方式style的类型最适合使用自定义的枚举类(见第7章)了,试着改造一下。
【项目2拓展2(思考)】这个思考题吊一下大家的胃口:设定义了两个分数类的对象,如CFraction c1, c2。如果定义了int i,我们能用cin>>i>>j;在键盘上输入i和j的值,是否期望用cin>>c1>>c2;输入分数呢?同理,用cout<<c1<<c2;进行输出,可以吗?进一步,用c1+c2得到新的一个分数,用c1/c2实现两个分数的除法,以及其他加、减、比较、求倒数等也是理所当然的。实际上,要自定义分数类,这些直观的基本运算应该要实现,这叫运算符的重载。本任务中用amplify()给出了“放大”运算的一种实现方案,更多内容值得期待地。


【项目3】编写基于对象的程序,求5个长方柱的体积和表面积。长方柱类Bulk的数据成员包括长(length)、宽(width)、高(heigth)等。另外:
  (1)需要定义长方柱类,5个长方柱采用一个对象数组表示;
  (2)定义相应的构造函数以支持如下main()函数中的初始化,其中前3个直接给出参数初始化(未给出的参数默认为1.0),第4个对象b[3]用默认构造函数初始化;第5个长方柱定义时不初始化,而是由键盘输入长、宽、高赋值;
  (3)输出这5个长方柱的体积和表面积;
int main()
{
	Bulk b[5]={Bulk(2.3,4.5,6.7),Bulk(1.5,3.4),Bulk(10.5)};
	b[4].get_value();
	//下面分别输出这5个长方柱的体积和表面积
}

【项目4】设计一个学生类Student,包括学号(num)和成绩(score)。建立一个对象数组,通过初始化,设置5个学生的数据,要求:
  (1)用指针指向数组首元素,输出第1、3、5个学生的信息;
  (2)设计一个函数int max(Student *arr);,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并返回值其学号。