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

课程首页地址: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个学生中成绩最高者,并返回值其学号。

时间: 2024-10-26 07:58:31

C++程序设计-第5周 用构造函数初始化的相关文章

2013级C++第5周(春)项目——用构造函数初始化

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759,由课程主页,可以看到完整教学方案,所有参考解答   有同学总结:老二说用数组法做给了我思路,真是有兄弟,不孤单.做了这道题才发现以前没用数组法做的那个判断第几天的程序结果存在错误. 我评论:每个人身边都有一帮子兄弟.靠兄弟,就不用靠老师.兄弟总在身边,弟兄们一起长大! 还有,实践中感受到的,就是真正学习到的.在学习中,只有将直接的体验与老师的讲解.看过的书交融起来,才能真

数组对象使用构造函数初始化的问题

问题描述 数组对象使用构造函数初始化的问题 解决方案 楼主你这样写不行的,只有定义的时候才能那么初始化 类里面加个成员函数用来设置变量的值SetValue class student { string name; double score; static int num; static double sum; public: student(string n = "no name", double s = 0):name(n),score(s) { num++; sum += scor

C#箴言:使用构造函数初始化语句

函数|语句 在写程序的时候,往往会出现为一个类型提供不同场景的构造函数,可能大多构造函数比较相似,而C#中又不允许缺省参数,因此构造函数的编写无疑是一个重复工作.但是使用Copy和Paste来完成构造函数的编写,有时候很难达到统一,尤其是当成员发生变化的时候.因此比较常见的替换方法就是为构造函数提供一个统一的成员函数来完成初始化工作. 例如: public class MyClass{ private int _Age; private string _Name; public MyClass(

构造函数初始化对象。。。

问题描述 构造函数初始化对象... 例如: public class A{ private B b; A(){ b = new B(); } } 1.这样做的好处 2.有什么场景会用到 解决方案 这是类的聚合嘛,比如说,一个LinkedList类(链表) 聚合一个叫做Header的Node类型(头节点),并且在构造函数中初始化它. 解决方案二: 处理数据 比如你想要的B数据是int的,但是获取到的却是string类型的数字,这时就用这个处理下 解决方案三: 一楼正解.类的组合使用方式,在构造函数

c++ 构造函数初始化报错如何解决

问题描述 c++ 构造函数初始化报错如何解决 #include #includeusing namespace std;class Teacher{public: Teacher(); Teacher(string nameint age) ;//如果对age进行初始化并且在main函数中实例化 一个 t5("Vivion")为什么会报错 Teacher(const Teacher&tea); void setName(string _name); string getName

struct-c++构造函数初始化成员变量的问题

问题描述 c++构造函数初始化成员变量的问题 struct GenListNode { }; struct Items { int utype; union { int ref; T value; GenListNode* link; }info; Items() :utype(0), info.ref(0) {};//编译提示这里语法错误 }; int main() { Items i; return 0; } 为什么会出错? 解决方案 代码不完整GenListNode<T>* link;

C++构造函数初始化顺序详解_C 语言

1.构造函数.析构函数与拷贝构造函数介绍 构造函数 1.构造函数不能有返回值 2.缺省构造函数时,系统将自动调用该缺省构造函数初始化对象,缺省构造函数会将所有数据成员都初始化为零或空 3.创建一个对象时,系统自动调用构造函数 析构函数 1.析构函数没有参数,也没有返回值.不能重载,也就是说,一个类中只可能定义一个析构函数 2.如果一个类中没有定义析构函数,系统也会自动生成一个默认的析构函数,为空函数,什么都不做 3.调用条件:1.在函数体内定义的对象,当函数执行结束时,该对象所在类的析构函数会被

c++-C++类构造函数初始化列表

问题描述 C++类构造函数初始化列表 #include using namespace std; class A { private: int n1; int n2; public: A() { n2=0; n1=n2+2; }//输出结果为:n1:2, n2: 0 A():n2(0),n1(n2+2){}//输出结果为n1:-858993458, n2: 0 //上面这两种方式有啥区别,求指导,为啥结果不一样 void Print(){ cout << "n1:" <

C++程序设计-第15周 数据结构扩展与GUI开发体验

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [目的] 1. 体验用面向对象的方法操作数组和动态链表2. 体验窗口程序的实现 第一部分 引言 大学中的学习死守着课本非常的没有劲.我不是说课本和课堂没用,而是说在课内的学习之余要有所拓展和扩充.大学的课程(和课本)成为一个体系,受到各种因素的制约,势必会形成一个框框,所涉及的内容可能就会形成"铁路警察,各管一段"的局面.课程和课本是有局限的,采用的是"