C++ | 类 | 构造参数

【项目1-三角形类的构造函数】

  设计三角形类,通过增加构造函数,使对象在定义时能够进行初始化,可以由下面的类声明开始,需要自己实现相关的成员函数,以及增加要求的构造函数

(1)

使用带参数构造函数,Triangle(double x, double y, double z),三边长在调用时由实参直接给出。需要的测试函数是:

int main()  

{  

    Triangle Tri(7,8,9);    //定义三角形类的一个实例(对象)  

    Tri.showMessage();  

    return 0;  

}  

头文件:

 

#include 
#include//C++专用,也兼容C的
using namespace std;
class Triangle
{
public:
	Triangle(double x, double y, double z) :a(x), b(y), c(z) {}//直接在类体中定义构造函数
	double perimeter();//周长  
	double area();//面积  
	void showMessage();
private:
	double a, b, c; //三边为私有成员数据  
};


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

double Triangle::perimeter()//不要忘记限定符
{
	return (a + b + c);
}

double Triangle::area()
{
	double s = (a + b + c) / 2;
	return(sqrt(s*(s - a)*(s - b)*(s - c)));

 

================================================================================================

(2)设计无参构造函数,默认各边长为1。需要的测试函数是:

int main()  

{  

    Triangle Tri;   //调用默认构造函数,不指定参数时,默认各边长为1;  

    Tri.showMessage();  

    return 0;  

}  

Triangle()
	{
		a = 1;
		b = 1;
		c = 1;
	}

 

================================================================================================

(3)使用带默认参数值的构造函数,不给定实参时,默认边长为1;注意——这个版本也只需要一个构造函数即可。需要的测试函数是:

int main()  

{  

    Triangle Tri1;   //定义边长为1 1 1的三角形类实例  

    Tri1.showMessage();  

    Triangle Tri2(1.5);//定义边长为1.5 1 1的三角形类实例  

    Tri2.showMessage();  

    Triangle Tri3(1.5,1.5);//定义边长为1.5 1.5 1的三角形类实例  

    Tri3.showMessage();  

    Triangle Tri4(7,8,9); //定义边长为7 8 9的三角形类实例  

    Tri4.showMessage();  

    return 0;  

}  

默认函数定义:

Triangle(double x=1, double y=1, double z=1) :a(x), b(y), c(z) {}

类文件:

using namespace std;
#include 
class Date
{
public:
	Date(int m = 1, int d = 1, int y = 2005) :month(m), day(d), year(y) {}//使用参数初始化表可以直接在类内定义
	void display();                                                       //使用默认参数可以避免函数重载
private:                                                                  //一个类只能有一个默认构造参数
	int month;
	int day;
	int year;
};

void Date::display()
{
	cout << month << "/"<< day << "/" << year<< endl;
}

main函数:

int main()
{
	Date d1(10, 13, 2005);
	Date d2(12, 30);
	Date d3(10);
	Date d4;
	d1.display();
	d2.display();
	d3.display();
	d4.display();
	system("pause");
	return 0;
}

运行结果:

C++ | 类 | 构造参数_第1张图片

============================================================================================

描述

请定义一个Point类,有两个数据成员:x和y, 分别代表x坐标和y坐标,并有若干构造函数和一个移动的成员函数,可输出移动后新的坐标值。

输入

第一行的两个数分别表示点的x坐标和y坐标,第二行的两个数分别表示x方向和y方向移动的距离。

输出

移动后点的x坐标和y坐标。

样例输入

1 5
2 5

样例输出

3 10

 

#include
using namespace std;
class Point
{
public:
	Point(int a, int b) :x(a), y(b) {};//设定原点的x-y坐标
	void Pointx(int, int);             //添加增量
	void Disp();

private:
	int x;
	int y;
	
};

void Point::Pointx(int c, int d)//易忘作用域,导致函数无法调用类体中的x,y
{
	
	x += c;
	y += d;
}

void Point::Disp()
{
	cout << x << "  " << y << endl;
}

int main()
{
	int a, b,c,d;
	cin >> a >> b;
	Point p(a, b);
	cin >> c >> d;
	p.Pointx(c,d);
	p.Disp();
	system("pause");
	return 0;
}

================================================================================================

【项目1对象数组

编写基于对象的程序,求5个长方体的体积和表面积。长方体类Bulk的数据成员包括长(length)、宽(width)、高(heigth)等。

对照已经给出的代码,要做的工作及要求有:

1.定义长方体类

2.定义由5个长方体对象构成的对象数组b;

3.b数组初始化;

①前3个对象b[0]、b[1]、b[2]直接参数初始化,需要定义构造函数,而初始化中,各对象提供的参数数目不同,需要有默认参数的构造函数(未给出的参数默认为1.0)

②第4个对象b[3]用默认构造函数初始化;

③第5个长方柱b[4]定义时不初始化,设计成员函数get_value,由键盘输入长、宽、高;

4.设计成员函数output,在main中调用输出这5个长方柱的体积和表面积;

  1. int main()  
  2. {  
  3.     Bulk b[5]={Bulk(2.3,4.5,6.7),Bulk(1.5,3.4),Bulk(10.5)};  
  4.     b[4].get_value();  
  5.     //下面分别输出这5个长方柱的体积和表面积  

}  

#include 
using namespace std;

class Bulk
{
public:
	 Bulk(double l=5 , double w=5, double h=5) :length(l), width(w), heigth(h) {};
	double volume(){ return heigth * width*length; };
	double area() { return 2 *( heigth * width + width * length + heigth * length ); };
	void get_value() 
	{
		cout << "分别输入长,宽,高"<> length>> length>> heigth;//直接调用私有成员,不用重新定义函数
		cout<<"b[5]的体积为:"<< volume() <

总结:

1.默认参数列表和参数初始化表可以结合,如:

Bulk(double l=5 , double w=5, double h=5) :length(l), width(w), heigth(h) {};

【项目2对象指针

设计一个学生类Student,数据成员包括学号(num)和成绩(score),成员函数根据需要自行设计(建议配备需要的set、get函数,以及必要的输入或输出)。在main函数中,要做到:

1.建立一个对象数组,通过初始化,设置5个学生的数据;

2.用指针指向数组首元素,输出第1、3、5个学生的信息;

3.设计一个函数int max(Student *arr);,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并返回值其学号。

下面给出部分程序,在此基础上完成项目:

  1. #include   
  2. using namespace std;     
  3. class Student  
  4. {  
  5. public:  
  6.     ……  
  7. private:  
  8.     int num;   //学号  
  9.     double score;   //成绩  
  10. };     
  11. //max函数返回arr指向的对象数组中的最高成绩(max并不是成员函数,而是普通函数)  
  12. int max(Student *arr);     
  13. int main()  
  14. {  
  15.     Student stud[5]=  
  16.     {  
  17.         Student(101,78.5),Student(102,85.5),Student(103,100),  
  18.         Student(104,98.5),Student(105,95.5)  
  19.     };  
  20.     //输出第1、3、5个学生的信息(用循环语句)  
  21.     ……  
  22.     //输出成绩最高者的学号  
  23.     cout<<"5个学生中成绩最高者的学号为: "<//调用函数显示最高成绩  
  24.  
  25.     return 0;  
  26. }  
  27.    
  28. //定义函数max,返回arr指向的对象数组中的最高成绩  
  29. int max(Student *arr)  
  30. {  
  31.     //求最高成绩及对应同学的学号  
  32.    
  33.   //返回最高成绩者的学号  
  34.     

#include 
using namespace std;

class Student
{
public:
	Student(int a, double b) :num(a), score(b) {};

	int get_num() { return num; }                    //返回的意思是:将数据成员输入的值送到调用它的函数中.
	double get_score(){ return score;  }
	void Disp();

private:
	int num;        //学号  
	double score;   //成绩  
};

void Student::Disp()
{
	cout << num << "  " << score << endl;
}

int max(Student *arr);//max函数返回arr指向的对象数组中的最高成绩(max并不是成员函数,而是普通函数)
                      //函数声明不可放在类前!程序在编译时是按顺序逐行编译的
int max(Student *arr)               //把指针当成变量一样用.
{
	double max_score = arr[0].get_score();
	int j = 0; //需要定义3个变量,i遍历全部5条数据,max_score记录最高分者的成绩,j记录最高分者的学号
	for (int i = 1; i < 5; i++)
	{
		if (arr[i].get_score() > max_score)      //函数在定义时,绝不能忘了加()
		{
			max_score = arr[i].get_score();
			j = i;
		}
		
	}
	cout << "最高成绩为:" << max_score << endl;
	system("pause");
	return (arr[j].get_num());           //返回的意思是:将main函数输入的初始值经过运算,再送回main(){}中.
}

//-------------------------------------------------------------------------------

	int main()
	{
		
		    Student stud[5] =
			    {
			        Student(101, 78.5),
					Student(102, 85.5),
					Student(103, 100),
				    Student(104, 98.5),
					Student(105, 95.5)
				    };
			//输出第1、3、5个学生的信息(用循环语句) 
			Student *p=stud;                              //什么时候加&.什么时候不加?
			for (int i = 0; i < 5;p=p+2,i=i+2)                //普通对象加,数组不加
			{
				cout << "学生" << i + 1 << ":";
				(*p).Disp();                               //忘加()
			}
		   //输出成绩最高者的学号  
			cout << "5个学生中成绩最高者的学号为: " << max(stud) << endl;
			    return 0;
		}



 

你可能感兴趣的:(C++)