第五周实验指导--任务三--编写基于对象的程序,求5个长方柱的体积和表面积...

本文介绍了一个基于对象的C++程序,用于计算5个长方柱的体积和表面积。通过对象数组实现,用户可以输入第5个长方柱的尺寸。
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:编写基于对象的程序,求5个长方柱的体积和表面积。
* 作 者:雷恒鑫
* 完成日期:2012 年03 月19 日
* 版 本 号:V1.0

* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:
* 程序输出:
* 程序头部的注释结束

*/

#include <iostream> 

using namespace std; 

int n=0; 

class square 

{ 

public: 

    //square();

    square(int l=1,int w=2,int h=3);

    void cin_date(); 

    void volume( ); 

    void show_volume( ); 

    void areas( ); 

    void show_areas(); 

private: 

      

    int length; 

    int width; 

    int heigth; 

}; 

  

int main( ) 

{ 

    square a[5]={square (1,2,3),square (2,3,4),square (3,4,5),square ()}; 

    ++n; 

    //a[0].(1,2,3); 

    a[0].volume( ); 

    a[0].areas( ); 

    ++n; 

    //a[1].(2,3,4); 

    a[1].volume( ); 

    a[1].areas( ); 

    ++n; 

    //a[2].(2,3,5); 

    a[2].volume( ); 

    a[2].areas( ); 

    ++n; 

    a[3].volume( ); 

    a[3].areas( ); 

    ++n;

    a[4].cin_date() ; 

    a[4].volume( ); 

    a[4].areas( ); 

    system("PAUSE"); 

    return 0; 

} 

/*square::square()

{

     length=1; 

     width=2; 

     heigth=3; 

}*/

square::square(int l,int w,int h)

{

     length=1; 

     width=w; 

     heigth=h; 

}

  

void square::cin_date( ) 

{ 

      

    char c1,c2; 

    int length1,width1,heigth1; 

    cout<<"请输入"<<"第"<<n<<"个长方柱的长宽高(格式:长:宽:高 )"<<endl; 

    while(1) 

    { 

        cin>>length1>>c1>>width1>>c2>>heigth1; 

        length=length1; 

        width=width1; 

        heigth=heigth1; 

          

       if(c1!=':'||c2!=':')    

            cout<<"格式不正确,请重新输入"<<endl; 

        else 

            break; 

    } 

    return; 

} 

void square::volume( ) 

{ 

    double volume; 

    volume=length*width*heigth; 

    cout<<"第"<<n<<"个长方柱的体积为:"<<volume<<endl; 

    return; 

} 

  

  

void square::areas( ) 

{ 

    double areas; 

    areas=2*(length*width+length*heigth+width*heigth); 

    cout<<"第"<<n<<"个长方柱的表面积为:"<<areas<<endl; 

    return; 

}

运行结果:


经验积累:
1.我学会了使用对象数组。

<think>根据用户需,我们需要创建:矩形Rectangle、长方体Cuboid(继承Rectangle)、测试Test。下面按照要逐步实现: 1. **矩形(Rectangle)**: - 属性:(length)、宽(width) - 方法:计算面积(area()),返回乘以宽 2. **长方体(Cuboid)**: - 继承自Rectangle - 新增属性:高(height) - 方法:计算体积(volume()),返回底面积乘以高(即*宽*高) 3. **测试(Test)**: - 创建长方体对象,设置、宽、高 - 输出底面积(即矩形的面积)体积 注意:在长方体中,我们可以通过继承直接使用宽属性(或通过父的公有方法访问),因此计算体积时可以直接用*宽*高。 参考引用中的代码,我们可以设计如下: ### 1. 矩形(Rectangle) ```java public class Rectangle { private double length; private double width; // 构造方法 public Rectangle(double length, double width) { this.length = length; this.width = width; } // 计算面积 public double area() { return length * width; } // 获取 public double getLength() { return length; } // 设置 public void setLength(double length) { this.length = length; } // 获取宽 public double getWidth() { return width; } // 设置宽 public void setWidth(double width) { this.width = width; } } ``` ### 2. 长方体(Cuboid),继承自Rectangle ```java public class Cuboid extends Rectangle { private double height; // 构造方法 public Cuboid(double length, double width, double height) { super(length, width); // 调用父构造方法 this.height = height; } // 获取高 public double getHeight() { return height; } // 设置高 public void setHeight(double height) { this.height = height; } // 计算体积 public double volume() { // 底面积(调用父的area方法)乘以高 return area() * height; } } ``` ### 3. 测试(Test) ```java public class Test { public static void main(String[] args) { // 创建一个长方体对象、宽、高均为10 Cuboid cuboid = new Cuboid(10, 10, 10); // 输出底面积 System.out.println("长方体的底面积: " + cuboid.area()); // 输出体积 System.out.println("长方体体积: " + cuboid.volume()); } } ``` ### 运行结果 ``` 长方体的底面积: 100.0 长方体体积: 1000.0 ``` ### 代码说明: 1. **继承关系**:`Cuboid`通过`extends Rectangle`继承矩形,从而可以直接使用矩形的属性方法。 2. **构造方法**:在`Cuboid`的构造方法中,使用`super(length, width)`调用父构造方法初始化宽。 3. **方法复用**:在计算体积时,直接调用继承的`area()`方法获取底面积,再乘以高度得到体积。 4. **封装性**:所有属性设置为私有,通过公有方法进行访问修改。 ### 扩展性: - 如果需要计算其他属性(如表面积),可以在`Cuboid`中添加相应的方法。 - 长方体也可以重写父的`area()`方法(如果需要不同的行为),但在此例中不需要。 ### 相关问题: 1. **为什么在Cuboid中可以直接调用area()方法?** - 因为Cuboid继承了Rectangle,所以可以访问Rectangle的公有方法(包括area()方法)。 2. **如果要长方体计算表面积,应该如何扩展?** - 在Cuboid中添加一个计算表面积的方法,比如`public double surfaceArea() { return 2*(getLength()*getWidth() + getLength()*height + getWidth()*height); }`。 3. **在继承中,子如何调用父的构造方法?** - 使用`super(...)`语句,且必须放在子构造方法的第一行。 4. **如果父没有无参构造方法,子构造方法该如何处理?** -构造方法必须显式调用父的有参构造方法(通过`super(参数)`)。 </think>下面是根据您的需实现的Java应用程序,包含矩形长方体测试: ### 1. 矩形 Rectangle.java ```java public class Rectangle { private double length; // 度属性 private double width; // 宽度属性 // 构造方法 public Rectangle(double length, double width) { this.length = length; this.width = width; } // 计算面积方法 public double calculateArea() { return length * width; // 面积 = × 宽 } // GetterSetter方法 public double getLength() { return length; } public void setLength(double length) { this.length = length; } public double getWidth() { return width; } public void setWidth(double width) { this.width = width; } } ``` ### 2. 长方体 Cuboid.java(继承自Rectangle) ```java public class Cuboid extends Rectangle { private double height; // 高度属性 // 构造方法 public Cuboid(double length, double width, double height) { super(length, width); // 调用父构造方法初始化宽 this.height = height; // 初始化高度 } // 计算体积方法 public double calculateVolume() { // 体积 = 底面积 × 高度,使用父的面积计算方法 return calculateArea() * height; } // GetterSetter方法 public double getHeight() { return height; } public void setHeight(double height) { this.height = height; } } ``` ### 3. 测试 CuboidTest.java ```java public class CuboidTest { public static void main(String[] args) { // 创建长方体对象=5,宽=3,高=4) Cuboid myCuboid = new Cuboid(5.0, 3.0, 4.0); // 计算并输出底面积 double baseArea = myCuboid.calculateArea(); System.out.printf("长方体底面积: %.2f 平方单位\n", baseArea); // 计算并输出体积 double volume = myCuboid.calculateVolume(); System.out.printf("长方体体积: %.2f 立方单位\n", volume); } } ``` ### 运行结果 ``` 长方体底面积: 15.00 平方单位 长方体体积: 60.00 立方单位 ``` ### 关键特性说明: 1. **继承关系**: - `Cuboid`通过`extends Rectangle`继承矩形的属性方法 - 长方体可以直接复用矩形的面积计算方法:$A = l \times w$ 2. **多态特性**: - 长方体对象`myCuboid`可以直接调用从父继承的`calculateArea()`方法 - 体积计算复用面积计算方法:$V = A \times h = (l \times w) \times h$ 3. **封装性**: - 所有属性均为`private`,通过公有方法访问 - 使用`super()`在子构造方法中调用父构造方法[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值