【C++】实验十三

news2024/9/24 11:28:28

题目:

1、声明Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出Cylinder(圆柱)类。将类的定义部分分别作为3个头文件。对它们的成员函数的声明部分分别作为3个源文件(.cpp文件),在主函数中用#include命令把它们包含进来。形成一个完整的程序,并上机运行。

2、教材第12章例12.3的基础上作以下修改。

*把构造函数修改为带参数的函数,在建立对象时初始化。

*先不要析构函数声明virtual,在main函数中另设一个指向Circle类对象的指针变量。使它指向gradl。运行程序,分析结果。

*不作第2点的修改而将析构函数声明为virtual,运行程序,分析结果。

3、声明抽象基类shape, 由它派生出3个派生类:Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象时给定。

参考代码:

1、

#ifndef _Circle_H//Circle.h
#define _Circle_H
#include<iostream.h>
class Circle:public Point{
protected:
    double radius;
public:
       Circle(double =0,double =0,double =0);
friend ostream & operator<<(ostream &,const Circle &);
    void setRadius(double);
    double getRadius()const;
    double area()const;
    };
#endif

#ifndef _Cylinder_H//Cylinder.h
#define _Cylinder_H
#include<iostream.h>
class Cylinder:public Circle{
 private:
    double height;
 public:
     Cylinder(double=0,double=0,double=0,double=0);
  void setHeight(double);
  double getHeight()const;
  double area()const;
  double volume()const;
  friend ostream & operator<<(ostream &,const Cylinder &);

};
#endif

#ifndef _Point_H//Point.h
#define _Point_H
#include<iostream.h>

class Point{
protected:
    double x;
    double y;
public:
    Point(double=0,double=0);
    void setPoint(double,double);
    double getX();
    double getY();
friend ostream & operator<<(ostream &,const Point &);

};
#endif

#include"Point.h"//Circle.cpp
#include"Circle.h"
#include<iostream.h>

Circle::Circle(double a ,double b ,double c ):Point(a,b){
    radius=c;
}

void Circle::setRadius(double a){
  radius = a;
}

double Circle::getRadius()const{
  return radius;
}

double Circle::area()const{
  return 3.14*radius*radius;
}

ostream &operator<<(ostream &output,const Circle &c){
    output<<c.area()<<endl; 

    return output;
}

#include"Point.h"//Cylinder.cpp
#include"Circle.h"
#include"Cylinder.h"
#include<iostream.h>


Cylinder::Cylinder(double a,double b,double c,double d):Circle(a,b,c){
 height = d;  
}

void Cylinder::setHeight(double a){
  height = a;

double Cylinder::getHeight ()const{
  return height;
}

double Cylinder::area()const{
    return 2*Circle::area()+height*2*3.14*radius;
}

double Cylinder::volume()const{
    return Circle::area() *height;
}

 ostream &operator<<(ostream & output,const Cylinder & cy){
  cout<< "修改x,y为[" << cy.x << "," << cy.y << "],r=" << cy.radius <<",h"<<cy.height << "\n" <<"表面积=" <<cy.area () << ",体积=" <<cy.volume () <<endl;
  return output;
}

#include"Point.h"//Point.cpp
#include<iostream.h>


Point::Point(double a,double b){
  x = a;
  y = b;
}

void Point::setPoint(double a,double b){
  x = a;
  y = b;
}

double Point::getX(){
  return x;
}

double Point::getY(){
  return y;
}

ostream & operator<<(ostream &output,const Point &p){
    output<<"["<<p.x<<","<<p.y<<"]"<<endl;
    return output;
}

#include"Point.h"//Main.cpp
#include"Circle.h"
#include"Cylinder.h"
#include<iostream.h>

int main(){
  Cylinder cy1(3.5,6.4,5.2,10);
  cout<< "圆柱:\nx=" << cy1.getX() << ",y=" << cy1.getY() << ",r=" << cy1.getRadius() << ",h=" << cy1.getHeight () << "\n" << "表面积=" << cy1.area() << ",体积=" << cy1.volume () << endl;
  cy1.setHeight (15);
  cy1.setRadius (7.5);
  cy1.setPoint(5,5);
  cout<<endl;
  cout<< "新圆柱:\n" <<cy1;
  Point &pRef = cy1;
  cout<< "\n"<<"x,y为" <<pRef;
  Circle &cRef = cy1;
  cout<< "\n"<<"圆的面积为" <<cRef;
  return 0;
}

2、

#include<iostream>
using namespace std;

class Point{
public:
    Point(){}
    virtual~Point(){
      cout<<"execyting Point destructor" <<endl;
    }
};

class Cricle:public Point{
public:
    Cricle(int = 0);
    virtual~Cricle(){
      cout<< "exceuting Circle destructor" << endl;
    }
private:
    int radus;
};

Cricle::Cricle(int a){
        radus = a;
    }

int main(){
  Point *p=new Cricle(33);
 // Cricle *c=new Cricle(33);  //第二小问
 // delete c;                  //第二小问
  delete p;
  return 0;
}

3、

#include<iostream>
using namespace std;

class shape{
public:
    virtual double area()=0;
    
};

class Circle:public shape{
public:
    Circle(double a){
      r=a;
    }
    virtual double area(){
      return r*r*3.14;
    }
protected:
    double r;
};

class Rectangle:public shape{
public:
    Rectangle(double a,double b){
      x=a;y=b;
    }
    virtual double area(){
      return x*y;
    }
protected:
  double x,y;
};

class Triangle:public shape{
public:
    Triangle(double a,double b){
      d=a;
      g=b;
    }
    virtual double area(){
      return d*g/2;
    }
protected:
    double d;
    double g;
};

 void printArea(Circle &c1,Rectangle &r1,Triangle &t1){
  cout<<"圆的面积:"<<c1.area()<<'\n'<<"矩形面积:"<<r1.area() <<'\n'<<"三角形面积:"<<t1.area ()<<endl;
}

int main(){
  void printArea(Circle &,Rectangle &,Triangle &);
    Circle c1(3.0);
  Rectangle r1(2.1,3.0);
  Triangle t1(2.2,3.3);
  printArea(c1,r1,t1);
  return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1966348.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构算法经典题目刨析(c语言)】链表的回文结构(图文详解)

&#x1f493; 博客主页&#xff1a;C-SDN花园GGbond ⏩ 文章专栏&#xff1a;数据结构经典题目刨析(c语言) 目录 一、题目描述 二、解题思路 三、代码实现&#xff08;C语言&#xff09; 回文结构&#xff08;Palindromic structure&#xff09;是指一个序列或字符串从前往…

C++多线程常用的几种实现方式

1、std::thread C11标准之后便引入了线程库std::thread。无论是windows或是Linux开发者都可以非常简单的通过这种方式&#xff0c;在C程序中创建和管理线程。 示例代码&#xff1a; #include <unistd.h> #include <iostream> #include <thread>void thread…

App 自动化测试调研

App 自动化测试调研 App 自动化测试的价值 App 自动化测试在软件开发过程中扮演着重要的角色&#xff0c;具有以下几个方面的价值&#xff1a; 1.提高测试效率和覆盖率&#xff1a;自动化测试可以执行大量的测试用例&#xff0c;覆盖各种功能和场景&#xff0c;相比手动测试…

BootStrapBlazor中MultiSelect组件在表格中使用时存在的问题

仅作记录&#xff0c;备以后回忆 在Table中使用了双击弹出编辑框来修改数据&#xff0c;正好逆变器需要多选&#xff0c;就使用了MultiSelect组件&#xff0c;结果发现它选择后没有任何效果&#xff0c;不会显示&#xff0c;但是保存后发现它是有数据的&#xff0c;网上搜了下…

关于python问题 ,生成的excel文件内无爬取的数据存在,请问应如何解决?

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

深度分析 !中国 AI 产业商业化实践案例 ! 2024 !

提供客户全渠道全生命周期的营服销一体化智能服务 京东云言犀依托于全栈自研的人工智能技术&#xff0c;基于京东集团广泛实体业务、庞大而又复杂的产业生态&#xff0c;从内部真实、复杂的海量业务场景实践中推出千亿级参数的言犀大模型&#xff0c;打造全新的智能交互与生成…

中国人民解放军建军97周年

缅怀先烈&#xff0c;砥砺前行 付吾辈之韶华&#xff0c;耀吾辈之中华! 万里河山&#xff0c;有您心安!

单链表习题(3)(超详细)

前言&#xff1a; 这篇文章将会是小编最近做过的习题总结的最后一篇&#xff0c;这一篇有些习题颇有一些难度&#xff0c;不过小编将会带领读者朋友们一起克服难关&#xff0c;下面废话不多说&#xff0c;开启今天的习题之旅&#xff01; 目录&#xff1a; 1.链表分割 2.相交链…

复习Nginx

1.关于Nginx Nginx的关键特性 1.支持高并发 2.内存资源消耗低 3.高扩展性&#xff08;模块化设计&#xff09; 4.高可用性&#xff08;master-worker&#xff09; Nginx运行架构 注意 默认情况下&#xff0c;Nginx会创建和服务器cpu核心数量相等的worker进程 worker进程之间…

自从用了这些监控工具,我连续几天没睡好觉!

大家好&#xff0c;我是程序员鱼皮&#xff0c;今天分享一些很实用的系统监控告警工具。 为什么要用监控告警&#xff1f; 说到监控告警&#xff0c;没有企业开发经验的同学非常容易忽视它&#xff0c;甚至会有同学觉得没有必要&#xff0c;大不了出了 Bug 再修就是了。 这种…

MySQL:初识数据库初识SQL创建数据库

目录 1、初识数据库 1.1 什么是数据库 1.2 什么是MySQL 2、数据库 2.1 数据库服务&数据库 2.2 C/S架构 3、 初识SQL 3.1 什么是SQL 3.2 SQL分类 4、使用SQL 4.1 查看所有数据库 4.1.2 语句解析 4.2 创建数据库 4.2.1 if not exists校验 4.2.2 手动明确字符集…

第33篇 计算数据中最长的连续1的个数<三>

Q&#xff1a;如何将计算出的结果&#xff08;最长的连续1的个数&#xff09;显示在DE2-115开发板的HEX上&#xff1f; A&#xff1a;基本原理&#xff1a;DE2-115_Computer_System中的HEX并行端口作为内存映射设备连接到DE2-115开发板的七段数码管&#xff0c;每个端口都对应…

uniapp微信小程序按钮分享定制动态传参

打印 onShareAppMessage 中的传参&#xff08;注意&#xff1a;上方我定义了一个open-type为share的按钮&#xff09; 打印之后如下&#xff1a; 给按钮绑定 data-id 可以在这里的 dataset 中取到 然后根据 from 的值来动态返回分享的参数 示例代码&#xff1a; <…

通过材质节点Panner实现球体自转

纹理坐标的移动&#xff0c;可以达到球体自转的功能&#xff0c;从而减少代码的复杂度。由于是绕着一个轴转动&#xff0c;所以在u方向移动即可。 材质&#xff1a; 材质实例 运行如下&#xff1a;

怎么把视频转换成mp4格式?分享几款视频转换软件

在数字化时代&#xff0c;视频已经成为我们日常生活和工作中的重要组成部分。然而&#xff0c;不同的设备和软件可能支持不同的视频格式&#xff0c;这常常导致兼容性问题。MP4作为一种广泛支持且高质量的视频格式&#xff0c;经常被用作解决这类问题的首选方案。那么&#xff…

医疗器械维修培训哪里好

医疗器械维修培训哪里好 医学技术的应用离不开医疗设备的支持,近几年医疗行业发展迅速&#xff0c;城镇、县级、市级医院设备也都越来越多&#xff0c;医疗机构拥有大量的医疗设备&#xff0c;需要专业的维修团队来保障设备的正常运行。医疗设备的论证、验收、使用、维护、维修…

多语言海外AEON抢单可连单加额外单源码,java版多语言抢单系统

多语言海外AEON抢单可连单加额外单源码&#xff0c;java版多语言抢单系统。此套是全新开发的java版多语言抢单系统。 后端java&#xff0c;用的若依框架&#xff0c;这套代码前后端是编译后的&#xff0c;测试可以正常使用&#xff0c;语言繁体&#xff0c;英文&#xff0c;日…

WebSocket 协议与 HTTP 协议、定时轮询技术、长轮询技术

目录 1 为什么需要 WebSocket&#xff1f;2 WebSocket2.1 采用 TCP 全双工2.2 建立 WebSocket 连接2.3 WebSocket 帧 3 WebSocket 解决的问题3.1 HTTP 存在的问题3.2 Ajax 轮询存在的问题3.3 长轮询存在的问题3.4 WebSocket 的改进 参考资料&#xff1a; 为什么有 h…

leetcode提示LeetCode extension needs Node.js installed in environment path

背景 系统&#xff1a;mac node版本 已通过nvm安装了多个版本node&#xff0c;并通过nvm alias default XX指定了node默认版本 描述&#xff1a;vscode安装了leetcode后&#xff0c;提示&#xff1a;LeetCode extension needs Node.js installed in environment path 问题…

leetcode958. 二叉树的完全性检验,层序遍历的巧用

leetcode958. 二叉树的完全性检验 给你一棵二叉树的根节点 root &#xff0c;请你判断这棵树是否是一棵 完全二叉树 。 在一棵 完全二叉树 中&#xff0c;除了最后一层外&#xff0c;所有层都被完全填满&#xff0c;并且最后一层中的所有节点都尽可能靠左。最后一层&#xff0…