《C++语言基础》实践参考——三角形类的构造函数

返回:贺老师课程教学链接

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

class Triangle
{
public:
    double perimeter();//计算三角形的周长
    double area();//计算并返回三角形的面积
    void showMessage();
private:
    double a,b,c; //三边为私有成员数据
};
void Triangle::showMessage()
{
    cout<<"三角形的三边长分别为:"<<a<<' '<<b<<' '<<c<<endl;
    cout<<"该三角形的周长为"<<perimeter()<<",面积为:"<<area()<<endl<<endl;
}

本项目将包括多个版本,开始写程序前,保证搞清楚何为带参数的构造函数、默认构造函数、有默认参数的构造函数、参数初始化表。
  (1)使用带参数构造函数,即Triangle(double x, double y, double z),三边长在调用时由实参直接给出。需要的测试函数是:

int main(){
    Triangle Tri(7,8,9);	//定义三角形类的一个实例(对象)
    Tri.showMessage();
    return 0;
}

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

int main()
{
    Triangle Tri;	//调用默认构造函数,不指定参数时,默认各边长为1;
    Tri.showMessage();
    return 0;
}

(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;
}

(4)在构造函数中使用参数初始化表对数据成员初始化,这是一种更加提倡的写法。测试函数同(1)。
[参考解答]

(1)

#include<iostream>
#include<Cmath>
using namespace std;
class Triangle
{
public:
    Triangle(double x, double y, double z)//(1)使用带参数构造函数
    {
        a=x;
        b=y;
        c=z;
    }
    double perimeter();//计算三角形的周长
    double area();//计算并返回三角形的面积
    void showMessage();
private:
    double a,b,c; //三边为私有成员数据
};

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));
}

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

int main()
{
    Triangle Tri(7,8,9);	//定义三角形类的一个实例(对象)
    Tri.showMessage();
    return 0;
}

(2)

#include<iostream>
#include<Cmath>
using namespace std;
class Triangle
{
public:
    Triangle()//(2)默认构造函数,即不指定参数时,默认各边长为1
    {
        a=1;
        b=1;
        c=1;
    }
    double perimeter();//计算三角形的周长
    double area();//计算并返回三角形的面积
    void showMessage();
private:
    double a,b,c; //三边为私有成员数据
};

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));
}

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

int main()
{
    Triangle Tri;	//调用默认构造函数,不指定参数时,默认各边长为1;
    Tri.showMessage();
    return 0;
}

(3)

#include<iostream>
#include<Cmath>
using namespace std;
class Triangle
{
public:
    Triangle(double x=1, double y=1, double z=1);//(3)声明使用默认参数的构造函数,不给定实参时,默认边长为1;
    double perimeter();//计算三角形的周长
    double area();//计算并返回三角形的面积
    void showMessage();
private:
    double a,b,c; //三边为私有成员数据
};

//本参考解答在类声明之外实现
Triangle::Triangle(double x, double y, double z)
{
	a=x;
	b=y;
	c=z;
}

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));
}

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

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;
}

(4)

#include<iostream>
#include<Cmath>
using namespace std;
class Triangle
{
public:
    Triangle(double x=1, double y=1, double z=1) :a(x),b(y),c(z){}	//(4)在构造函数中使用参数初始化表
    double perimeter();//计算三角形的周长
    double area();//计算并返回三角形的面积
    void showMessage();
private:
    double a,b,c; //三边为私有成员数据
};

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));
}

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

int main()
{
    Triangle Tri(7,8,9);	//定义三角形类的一个实例(对象)
    Tri.showMessage();
    return 0;
}

  或者,将构造函数定义在类外时,写成为:

Triangle::Triangle(double x, double y, double z):a(x),b(y),c(z){}	//(4)在构造函数中使用参数初始化表
时间: 2024-10-24 03:23:45

《C++语言基础》实践参考——三角形类的构造函数的相关文章

《C++语言基础》实践参考——三角形类1

返回:贺老师课程教学链接 [项目1 - 三角形类1]下面设计一个三角形类,请给出各成员函数的定义  #include<iostream> #include<Cmath> using namespace std; class Triangle { public: void setABC(double x, double y, double z);//置三边的值,注意要能成三角形 void getABC(double *x, double *y, double *z);//取三边的值

《C++语言基础》实践参考——三角形类2

返回:贺老师课程教学链接 [项目2 - 三角形类2]程序功能同项目1,main()函数如下,请重新定义Triangle类,其中逻辑特别简单的set和get成员函数,要处理为内置成员函数,直接在类内定义. int main() { Triangle tri1; //定义三角形类的一个实例(对象) double x,y,z; cout<<"请输入三角形的三边:"; cin>>x>>y>>z; tri1.setA(x); tri1.setB(y

《C++语言基础》实践参考—— 链表类

返回:贺老师课程教学链接  项目要求 [项目 - 链表类]动态链表也是程序设计中的一种非常有用的数据结构.可以说,是否能够理解有关操作的原理,决定了你是否有资格称为"科班"出身.在后续的专业基础课中,相关的内容还会从不同的角度,反复地认识,反复地实践.不过,在现阶段多些体验,也是很有必要的了.(1)阅读下面的程序,回顾一下动态链表,阅读程序过程中,请用笔画一画形成链表的过程中指针值的变化. #include <iostream> using namespace std; s

C++实践参考——时间类

[项目 - 时间类]阅读.运行程序后,按要求扩充类的功能 #include <iostream> using namespace std; class Time { public: void set_time( ); void show_time( ); private: bool is_time(int, int, int); //这个成员函数设置为私有的,是合适的,请品味 int hour; int minute; int sec; }; void Time::set_time( ) {

《C++语言基础》实践参考——分数类中的运算符重载

返回:贺老师课程教学链接 [项目3-分数类中的运算符重载] (1)实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简).比较(6种关系)的运算.可以在第4周分数类代码的基础上开始工作. class CFraction { private: int nume; // 分子 int deno; // 分母 public: //构造函数及运算符重载的函数声明 }; //重载函数的实现及用于测试的main()函数 [参考解答] #include <iostream> #inclu

《C++语言基础》实践参考——复数类中的运算符重载(续)

返回:贺老师课程教学链接 项目要求 [项目1-复数类中的运算符重载(续)]在复数类中的运算符重载基础上(1)再定义一目运算符 -,-c相当于0-c.(2)定义Complex类中的<<和>>运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然.[参考解答] #include <iostream> using namespace std; class Complex { public: Complex() { real=0; imag=0; }

《C++语言基础》实践参考——友元类

返回:贺老师课程教学链接 [项目5-友元类]定义下面两个类的成员函数(为体验友元类,实际上本例并不一定是一个好的设计,将两个类的合并为一个DateTime,日期.时间都处理更好) class Date; //对Date类的提前引用声明 class Time { public: Time(int,int,int); void add_a_second(Date &); //增加1秒,1秒后可能会到了下一天,乃到下一月.下一年 void display(Date &); //显示时间,格式:月

《C++语言基础》实践参考——Time类中的运算符重载

返回:贺老师课程教学链接 [项目2-Time类中的运算符重载]实现Time类中的运算符重载. class CTime { private: unsigned short int hour; // 时 unsigned short int minute; // 分 unsigned short int second; // 秒 public: CTime(int h=0,int m=0,int s=0); void setTime(int h,int m,int s); void display(

《C++语言基础》参考——学生可以相加吗?

返回:贺老师课程教学链接 谈及运算,我们总是习惯"数"的运算.而实际上,像时间之类的对象也是可以进行加减运算的.再进一步,我们的思维还可以拓展,运算加以加到任何事物上,只要我们可以为这些"运算"设计好意义. 例如:有班级类和学生类.两个学生相加,组成了一个由两个学生构成的班级:班级加学生,代表班级增加了一名新同学:学生乘学生,结果为这两个学生"结对子",可以做某些事(这个对子,需要定义成一个新的类):班级乘班级,是班级中的所有学生,两两结对子的所