c++ 形状类Shape(派生出圆类Circle和矩形类Rectangle)

1.建立一个形状类Shape作为基类,派生出圆类Circle和矩形类Rectangle,求出面积并获取相关信息。

具体要求如下:

(1)形状类Shape

(a)保护数据成员
double x,y:对于不同的形状,x和y表示不同的含义,如对于圆,x和y均表示圆的半径,而对于矩形,x表示矩形的长,y表示矩形的宽。访问权限定义为保护类型是为了能被继承下去,以便派生类能直接访问x和y。
(b)公有成员函数
构造函数Shape(double _x,double _y):用_x、_y分别初始化x、y。
double GetArea():求面积,在此返回0.0。

(2)圆类Circle,从Shape公有派生

(a)公有成员函数
Circle(double r):构造函数,并用r构造基类的x和y。
double GetArea():求圆的面积。
double GetRadius():获取圆的半径。

(3)矩形类Rectangle,从Shape公有派生

(a)公有成员函数
Rectangle(double l,double w) :构造函数,并用l和w构造基类的x和y。
double GetArea():求矩形的面积。
double GetLength():获取矩形的长。
double GetWidth():获取矩形的宽。

(4)在主函数中对派生类进行测试。注意,在程序的开头定义符号常量PI的值为3.14。

测试的输出结果如下:
circle:r=1, area=3.14
rectangle:length=3, width=4, area=12

#include "stdafx.h"
#include<iostream>
using namespace std;
#define PI 3.14
class Shape
{
public:
	Shape(){}
	Shape(double _x,double _y):x(_x),y(_y){}
	double GetArea();
protected:
	double x,y;

};
double Shape::GetArea()
{
	return 0.0;
}
class Circle:public Shape
{
public:
	Circle(){}
	Circle(double r){ x=r;}//构造函数,并用r构造基类的x和y。
  double GetArea();//求圆的面积。
  double GetRadius();//获取圆的半径。
};

double Circle::GetArea()
{
	return PI*x*x;
}
double Circle::GetRadius()
{
	return x;
}

class Rectangle:public Shape
{
public:
	Rectangle(){}
	Rectangle(double l,double w){x = l;y=w;}//构造函数,并用l和w构造基类的x和y。
  double GetArea();//求矩形的面积。
  double GetLength();//获取矩形的长。
  double GetWidth();//获取矩形的宽

};
 double Rectangle::GetArea()
 {
	 return x*y;
 }
 double Rectangle::GetLength()
 {
	 return y;
 }
 double Rectangle::GetWidth()
 {
	 return x;
 }
int main(int argc, _TCHAR* argv[])
{

	Circle circle(1);

	cout<<" Radius="<<circle.GetRadius()<<" area="<<circle.GetArea()<<endl;
	Rectangle rectangle(3,4);

	cout<<" Length="<<rectangle.GetLength()<<" Width="<<rectangle.GetWidth()<<" area="<<rectangle.GetArea()<<endl;
	return 0;
}

到此这篇关于c++ 形状类Shape(派生出圆类Circle和矩形类Rectangle)的文章就介绍到这了,更多相关c++ 形状类Shape内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • c++ 形状类Shape(派生出圆类Circle和矩形类Rectangle)

    1.建立一个形状类Shape作为基类,派生出圆类Circle和矩形类Rectangle,求出面积并获取相关信息. 具体要求如下: (1)形状类Shape (a)保护数据成员 double x,y:对于不同的形状,x和y表示不同的含义,如对于圆,x和y均表示圆的半径,而对于矩形,x表示矩形的长,y表示矩形的宽.访问权限定义为保护类型是为了能被继承下去,以便派生类能直接访问x和y. (b)公有成员函数 构造函数Shape(double _x,double _y):用_x._y分别初始化x.y. do

  • c#创建圆形类Circle、矩形类实现代码

    c#创建圆形类,其中包括set,get方法 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 圆 { class circle { int center_x; int center_y; double Radius; public int x { get { return center_x; }

  • 详解C++中基类与派生类的转换以及虚基类

    C++基类与派生类的转换 在公用继承.私有继承和保护继承中,只有公用继承能较好地保留基类的特征,它保留了除构造函数和析构函数以外的基类所有成员,基类的公用或保护成员的访问权限在派生类中全部都按原样保留下来了,在派生类外可以调用基类的公用成员函数访问基类的私有成员.因此,公用派生类具有基类的全部功能,所有基类能够实现的功能, 公用派生类都能实现.而非公用派生类(私有或保护派生类)不能实现基类的全部功能(例如在派生类外不能调用基类的公用成员函数访问基类的私有成员).因此,只有公用派生类才是基类真正的

  • 详谈C++中虚基类在派生类中的内存布局

    今天重温C++的知识,当看到虚基类这点的时候,那时候也没有太过追究,就是知道虚基类是消除了类继承之间的二义性问题而已,可是很是好奇,它是怎么消除的,内存布局是怎么分配的呢?于是就深入研究了一下,具体的原理如下所示: 在C++中,obj是一个类的对象,p是指向obj的指针,该类里面有个数据成员mem,请问obj.mem和p->mem在实现和效率上有什么不同. 答案是:只有一种情况下才有重大差异,该情况必须满足以下3个条件: (1).obj 是一个虚拟继承的派生类的对象 (2).mem是从虚拟基类派

  • C++中基类和派生类之间的转换实例教程

    本文实例讲解了C++中基类和派生类之间的转换.对于深入理解C++面向对象程序设计有一定的帮助作用.此处需要注意:本文实例讲解内容的前提是派生类继承基类的方式是公有继承,关键字public.具体分析如下: 以下程序为讲解示例: #include<iostream> using namespace std; class A { public: A(int m1, int n1):m(m1), n(n1){} void display(); private: int m; int n; }; voi

  • C++类中const修饰的成员函数及日期类小练习

    目录 一.const修饰类的成员函数 1.问题引出: 2.问题分析 3.const修饰类的成员函数 二. 类的两个默认的&运算符重载 三. 日期类小练习 总结 一.const修饰类的成员函数 1.问题引出: 给出一段简单的代码 代码段: #include <iostream> using std::cin; using std::cout; using std::endl; class Date1 { public: Date1(int year = 2000) 类的全缺省构造函数(可

  • Pandas数据形状df.shape的实现

    pandas: shape()获取Dataframe的行数和列数 返回列数: df.shape[1] 返回行数: df.shape[0] 或者:len(df) 返回形状,即几行几列的数组 dataframe.shape() 执行df.shape会返回一个元组,该元组的第一个元素代表行数,第二个元素代表列数,这就是这个数据的基本形状,也是数据的大小 import pandas as pd df = pd.DataFrame([['liver','E',89,21,24,64], ['Arry','

  • 利用python打印出菱形、三角形以及矩形的方法实例

    前言 本文主要给大家介绍了关于利用python打印出菱形.三角形以及矩形的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍: 实例代码 #coding:utf-8 rows = int(raw_input('输入列数: ')) i = j = k = 1 #声明变量,i用于控制外层循环(图形行数),j用于控制空格的个数,k用于控制*的个数 #等腰直角三角形1 print "等腰直角三角形1" for i in range(0, rows): for k in range

  • C#中将xml文件反序列化为实例时采用基类还是派生类的知识点讨论

    基类: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DeserializeTest { public class SettingsBase { private string m_fileName; public string FileName { get { return m_fileName; } set { m_fileName = value;

  • python计算圆周长、面积、球体体积并画出圆

    输入半径,计算圆的周长.面积.球体体积,并画出这个圆.拖动条.输入框和图像控件的数据保持一致! Fedora下测试通过 复制代码 代码如下: #https://github.com/RobberPhex/GTK-Example-CalcAreafrom gi.repository import Gtk, Gdk, GdkPixbuffrom PIL import Image, ImageDrawfrom io import BytesIOfrom math import pi class Mod

随机推荐