C++第5周(春)项目1 三角形类1

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接

【项目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)在构造函数中使用参数初始化表

【项目1拓展(选做)】

  请自行设计一个矩形类,可以计算矩形的面积、周长、对象线,判断是否是正方形。请用上类似的构造函数,自己设计main()函数,对设计的类进行测试。

  

china-pub | 亚马逊 | 京东
当当  | 豆瓣 
图灵社区  官方样章下载
==================== 迂者 贺利坚 CSDN博客专栏=================
|== IT学子成长指导专栏 专栏文章分类目录(不定期更新)  ==|
|== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====

  
    

时间: 2025-01-04 17:30:00

C++第5周(春)项目1 三角形类1的相关文章

C++第4周(春)项目2 三角形类2

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目2 - 三角形类2]程序功能同项目1,main()函数如下,请重新定义Triangle类,其中逻辑特别简单的set和get成员函数,要处理为内置成员函数,直接在类内定义. int main() { Triangle tri1; //定义三角形类的一个实例(对象) double x,y,z; cout<<"请输入三角形的三边:&

C++第8周(春)项目3 分数类中的运算符重载

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目3-分数类中的运算符重载]实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简).比较(6种关系)的运算.可以以第5周项目2的代码为基础开始工作. class CFraction { private: int nume; // 分子 int deno; // 分母 public: //构造函数及运算符重载的函数声明 }

C++第3周(春)项目3 时间类

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目3 - 时间类]阅读.运行程序后,按要求增加类的功能 #include <iostream> using namespace std; class Time { public: void set_time( ); void show_time( ); private: bool is_time(int, int, int); //这个成

C++第7周(春)项目4 友元类

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目4-友元类] 定义下面两个类的成员函数(为体验友元类,实际上本例并不一定是一个好的设计,将两个类的合并为一个DateTime,日期.时间都处理更好) class Date; //对Date类的提前引用声明 class Time { public: Time(int,int,int); void add_a_second(Date &);

C++第11周(春)项目3 - 点类派生直线类

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目3 - 点类派生直线类]定义点类Point,并以点类为基类,派生出直线类Line,从基类中继承的点的信息表示直线的中点.请阅读下面的代码,并将缺少的部分写出来. #include<iostream> #include<Cmath> using namespace std; class Point //定义坐标点类 { pub

C++第5周(春)项目2 分数类的雏形

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目2-分数类的雏形] C++中提供了多种基本的数据类型.实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理虚数的),再如分数.我们可以自定义类支持这些数据类型. 本任务将设计一个简单的分数类,完成对分数的几个运算.一则巩固基于对象编程的方法,二则也为第10章做运算符重载等积累些感性认识. 分数类的声明为: class CFr

C++第9周(春)项目3 - 分数类

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目3]在第8周项目3基础上(1)定义分数的一目运算+和-,分别代表分数取正和求反,将"按位取反运算符"~重载为分数的求倒数运算.(2)定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然. 参考解答: #include <iostream> #

C++第9周(春)项目1 - 复数类

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目1]在第8周项目1基础上(1)再定义一目运算符 -,-c相当于0-c.(2)定义Complex类中的<<和>>运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然. 参考解答: #include <iostream> using namespace std; class Complex

C++第9周(春)项目2 - Time类

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目2]在第8周项目2基础上(1)定义对时间对象的自增和自减一目运算符 //一目运算符的重载 CTime operator++(int);//后置++,下一秒 CTime operator++();//前置++,下一秒,前置与后置返回值不一样 CTime operator--( int);//后置--,前一秒 CTime operator--