首页 > 编程语言 >C++类虚函数实现多态求长方体和圆柱体的体积

C++类虚函数实现多态求长方体和圆柱体的体积

时间:2024-06-17 18:57:37浏览次数:22  
标签:初始化 Container getvolumn 类虚 多态 height double 长方体 public

#include <iostream>
using namespace std;
#define PI 3.14
class Container {
	public:
		Container(double h) {
			height=h;          //简单的方法初始化h
		}
		virtual double getvolumn()=0;     //纯虚函数
	protected:
		double height;    
};
class Cube:public Container {
	public:
		Cube(double l, double w, double h):Container(h) {   
			length=l;
			width=w;
		}
		virtual double getvolumn() {    
			return length*width*height;    //返回值为正方体的体积
		}
	private:      //cube的私有成员
		double length;
		double width;
};
class Cylinder:public Container {
	public:
		Cylinder(double r, double h):Container (h) {
			radius=r;
			height=h;
		}
		virtual double getvolumn() {
			return PI*radius*radius*height;
		}
	private:
		double radius;
};
int main(){
	Container *p;    //定义指针变量p
	Cube cube(10,20,30);
	p=&cube;         //获得输入的长宽高
	cout<<"长方体的体积为"<<p->getvolumn()<<endl;
	Cylinder cylinder(10,20);
	p=&cylinder;     //获得输入的半径和高
	cout<<"圆柱体的体积为"<<p->getvolumn()<<endl;
	return 0;
}
/*长方体的体积为6000
圆柱体的体积为6280

--------------------------------
Process exited after 0.3998 seconds with return value 0
请按任意键继续. . .*/
#include <iostream>  // 包含输入输出流的头文件,用于实现输入输出功能  
using namespace std; // 使用C++标准库的命名空间  
#define PI 3.14      // 定义π的值为3.14,用于后续计算  
  
// 定义一个名为Container的基类  
class Container {  
public:  
    Container(double h) {  // 构造函数,用于初始化高度  
        height = h;         // 将传入的高度值赋给成员变量height  
    }  
    virtual double getvolumn() = 0;  // 纯虚函数,需要在派生类中实现,用于计算体积  
protected:  
    double height;  // 保护成员变量,表示高度,可在派生类中被访问  
};  
  
// 定义一个名为Cube的派生类,继承自Container类,表示长方体  
class Cube : public Container {  
public:  
    // 构造函数,初始化长方体的长、宽和高,并调用基类的构造函数初始化高度  
    Cube(double l, double w, double h) : Container(h) {     
        length = l;  // 初始化长  
        width = w;   // 初始化宽  
    }  
    // 实现基类的纯虚函数,用于计算长方体的体积  
    virtual double getvolumn() {      
        return length * width * height;  // 返回长方体的体积  
    }  
private:  // Cube类的私有成员  
    double length;  // 表示长  
    double width;   // 表示宽  
};  
  
// 定义一个名为Cylinder的派生类,继承自Container类,表示圆柱体  
class Cylinder : public Container {  // 注意:类名拼写错误,应为Cylinder而非Cylinder  
public:  
    // 构造函数,初始化圆柱体的半径和高,并调用基类的构造函数初始化高度  
    Cylinder(double r, double h) : Container(h) {  
        radius = r;  // 初始化半径  
        // height = h;  // 这行代码是多余的,因为基类构造函数已经初始化了height  
    }  
    // 实现基类的纯虚函数,用于计算圆柱体的体积  
    virtual double getvolumn() {  
        return PI * radius * radius * height;  // 返回圆柱体的体积,使用预定义的π值  
    }  
private:  
    double radius;  // 表示半径  
};  
  
int main() {  // 主函数  
    Container *p;   // 定义一个指向Container类型的指针p  
    Cube cube(10, 20, 30);  // 创建一个长方体对象,长10,宽20,高30  
    p = &cube;               // 将指针p指向长方体对象  
    // 输出长方体的体积  
    cout << "长方体的体积为" << p->getvolumn() << endl;  
    Cylinder cylinder(10, 20);  // 创建一个圆柱体对象,半径10,高20  
    p = &cylinder;              // 将指针p指向圆柱体对象  
    // 输出圆柱体的体积  
    cout << "圆柱体的体积为" << p->getvolumn() << endl;  
    return 0;  // 主函数返回0,表示程序正常结束  
}  
/*  
输出结果为:  
长方体的体积为6000  
圆柱体的体积为6280  
*/

标签:初始化,Container,getvolumn,类虚,多态,height,double,长方体,public
From: https://blog.csdn.net/2301_78986604/article/details/139752064

相关文章

  • Java接口的介绍与使用,多态的介绍与使用
    第一章.接口1.接口的介绍2.接口的定义以及使用1.接口:是一个引用数据类型,是一种标准,规则2.关键字:a.interface接口publicinterface接口名{}b.implements实现实现类implements接口名{}3.接口中可以定义的成员:a.jdk7以及之......
  • Java面向对象基本特征——抽象、接口、多态、内部类
    面向对象概述        面向对象思想是从现实世界客观存在的事物出发来构造软件系统。对象是现实生活中实际存在的事物;类是由相同类型的对象共有的特征和行为归纳构成的。    而面向对象的思想就是把现实世界中的对象所具有的特征和行为抽象出来形成一个类,再根......
  • java学习笔记(八):多态、包、权限修饰符、修饰方法、final
    目录一、多态1.1多态的形式1.2多态的使用场景1.3多态的定义和前提1.4多态的运行特点1.5多态的弊端1.6引用类型转换1.7综合练习二、包2.1包名的命名规范:2.2导包2.3使用不同包下的相同类怎么办?三、权限修饰符3.1权限修饰符3.2不同权限的访问能力四、......
  • python 中的多态
    多态的基本思想是相同的操作可以作用于不同的对象。这个概念可以通过方法重写和鸭子类型来实现。方法重写(MethodOverriding)在继承体系中,子类可以重写(覆盖)父类的方法,从而提供子类特有的实现。这样,即使不同的对象实现了不同的方法,它们仍然可以通过相同的接口进行调用。示例:方......
  • 11_1、多态性:概念及运算符重载
    多态性多态的概念和类型多态的类型多态的实现运算符重载运算符重载的概念和规则概念规则运算符重载为类的成员函数双目运算符单目运算符运算符重载为类的友元函数双目运算符重载单目运算符重载多态的概念和类型消息:消息在C++编程中指的是对类的成员函数的调用。......
  • 【练习代码】6.11 java学习记录:继承与多态(实例:媒体资料库的设计)
    设计一个媒体资料库,能存入不同类别的媒体资料,例如CD与DVD,并且能完成添加与列表等操作,需要些什么?最基础的想法一个代表整体库的DataBase类,内部的属性包括CD和DVD的Arraylist,对应操作通过定义自己的方法来实现,部分代码如下:publicclassDatabase{privateArrayList<CD>......
  • 第五章:多态、抽象类、虚函数、虚函数表
    一、虚函数:1.1虚函数的概念:被virtual修饰的类成员函数称为虚函数。通过重写虚函数,可以实现多态。        1.2如何重写虚函数:派生类中有一个跟基类完全相同的虚函数(即派生类虚函数与基类虚函数的返回值类型、函数名字、参数列表类型完全相同),称子类的虚函数重......
  • 继承/多继承/菱形继承/虚继承/多态
    以下是一个简单的比喻,将多态概念与生活中的实际情况相联系:比喻:动物园的讲解员和动物表演想象一下你去了一家动物园,看到了许多不同种类的动物,如狮子、大象、猴子等。现在,动物园里有一位讲解员,他会为每种动物表演做简单的介绍。在这个场景中,我们可以将动物比作是不同的类,而每......
  • 多态的类型有哪些?
    1.多态的类型多态性有四种类型:重载多态、强制多态、参数多态和包含多态。前两种可以统称为专用多态。之前讲过普通函数的重载和类的成员函数的重载,它们都属于重载多态。上面说的整型变量和浮点型变量相加时,需要先把整型变量强制转换为浮点型再进行加法运算,这就是强制多态......
  • C++多态详解:静态多态与动态多态的实现
    C++中的多态是面向对象编程的重要特性,允许相同的接口调用不同的实现。多态性可以分为两类:静态多态和动态多态。1.静态多态(编译时多态)(1)函数重载(FunctionOverloading):函数重载是一种静态多态,允许同一个函数名在同一作用域内具有不同的参数列表。这些不同的版本在编译时......