C++第11周项目1、2 - 点类派生出直线类

2024-03-03 10:32
文章标签 c++ 项目 直线 生出 点类

本文主要是介绍C++第11周项目1、2 - 点类派生出直线类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/8894095


【项目1】定义点类,并以点类为基类,派生出直线类,从基类中继承的点的信息表示直线的中点。请阅读下面的代码,并将缺少的部分写出来。

#include<iostream>
#include<Cmath>
using namespace std;
class Point //定义坐标点类
{
public:Point():x(0),y(0) {};Point(double x0, double y0):x(x0), y(y0) {};void PrintPoint(); //输出点的信息double x,y;   //数据成员,表示点的横坐标和纵坐标
};
void Point::PrintPoint()
{cout<<"Point:("<<x<<","<<y<<")";    //输出点
}class Line: public Point   //利用坐标点类定义直线类, 其基类的数据成员表示直线的中点
{
public:Line(Point pt1, Point pt2);  //构造函数,初始化直线的两个端点及由基类数据成员描述的中点,中点的坐标可以由端点坐标计算而来double Length();    //计算并返回直线的长度void PrintLine();   //输出直线的两个端点和直线长度
private:Point pts,pte;   //直线的两个端点
}; 
//下面定义Line类的成员函数int main()
{Point ps(-2,5),pe(7,9);Line l(ps,pe);_____________________;//输出直线l的信息(请补全代码)cout<<"\n The middle point of Line: ";_____________________ ;//输出直线l中点的信息(请补全代码,调用成员函数完成)return 0;
}

【项目2】要求与项目1几乎完全相同(除Point类中的数据成员要求为private型),要求补全点类和直线类的定义,调用main()函数输出一条直线的信息。
    请不要直接copy项目1的代码,通过修改项目1的程序完成项目2的要求。在有关“抄之有道”的学习方法中,我们有阅读代码,然后自己再写出来的建议。所以,项目2可以在以下代码的提示下开始去做,在项目1中获得的经验会有所帮助,这个过程也会对项目1中的收获有更多理解。其实,当这一些技术熟练之后,根据需求会自己设计并实现,那是我们的最终目标。

    项目2可以参考的代码如下,在完成时可以根据需要自行添加其他成员函数,成员函数在类内实现还是类外实现,也可以自行决定。

class Point //定义坐标点类
{
public://定义必要的构造函数void PrintPoint(); //输出点的信息
private:double x,y;   //点的横坐标和纵坐标
};
class Line: public Point   //利用坐标点类定义直线类, 其基类的数据成员表示直线的中点
{
public:Line(Point pts, Point pte);  //构造函数,用初始化直线的两个端点及由基类数据成员描述的中点void PrintLine();   //输出直线的两个端点和直线长度
private:class Point pts, pte;   //直线的两个端点
};
int main()
{Point ps(-2,5),pe(7,9);Line l(ps,pe);//下面输出直线l的端点、长度和、中点的信息return 0;
}

参考解答:

#include<iostream>
#include<Cmath>
using namespace std;
class Point //定义坐标点类
{
public:Point():x(0),y(0) {};Point(double x0, double y0):x(x0), y(y0) {};double getX(){return x;}double getY(){return y;}void PrintPoint(); //输出点的信息
private:double x,y;   //点的横坐标和纵坐标
};
void Point::PrintPoint()
{cout<<"Point:("<<x<<","<<y<<")";    //输出点
}class Line: public Point   //利用坐标点类定义直线类, 其基类的数据成员表示直线的中点
{
public:Line(Point pts, Point pte);  //构造函数,用初始化直线的两个端点及由基类数据成员描述的中点double Length();    //计算并返回直线的长度void PrintLine();   //输出直线的两个端点和直线长度
private:class Point pts,pte;   //直线的两个端点
};
//构造函数,分别用初始化直线的两个端点及由基类数据成员(属性)描述的中点
Line::Line(Point pt1, Point pt2):Point((pt1.getX()+pt2.getX())/2,(pt1.getY()+pt2.getY())/2)
{pts=pt1;pte=pt2;
}
double Line::Length()  //计算并返回直线的长度
{double dx = pts.getX() - pte.getX();double dy =pts.getY() - pte.getY();return sqrt(dx*dx+dy*dy);
}
void Line::PrintLine()
{cout<<" 1st ";pts.PrintPoint();cout<<"\n 2nd ";pte.PrintPoint();cout<<"\n The Length of Line: "<<Length()<<endl;
}
int main()
{Point ps(-2,5),pe(7,9);Line l(ps,pe);l.PrintLine();//输出直线l的信息cout<<"\n The middle point of Line: ";l.PrintPoint() ;//输出直线l中点的信息return 0;
}


这篇关于C++第11周项目1、2 - 点类派生出直线类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/769358

相关文章

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

C++11委托构造函数和继承构造函数的实现

《C++11委托构造函数和继承构造函数的实现》C++引入了委托构造函数和继承构造函数这两个重要的特性,本文主要介绍了C++11委托构造函数和继承构造函数的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录引言一、委托构造函数1.1 委托构造函数的定义与作用1.2 委托构造函数的语法1.3 委托构造函

C++11作用域枚举(Scoped Enums)的实现示例

《C++11作用域枚举(ScopedEnums)的实现示例》枚举类型是一种非常实用的工具,C++11标准引入了作用域枚举,也称为强类型枚举,本文主要介绍了C++11作用域枚举(ScopedEnums... 目录一、引言二、传统枚举类型的局限性2.1 命名空间污染2.2 整型提升问题2.3 类型转换问题三、C

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文