第14周C++上機報告(抽象基類CSolid)
阿新 • • 發佈:2019-01-24
/* * 程式的版權和版本宣告部分 * Copyright (c)2012, 煙臺大學計算機學院學生 * All rightsreserved. * 檔名稱: object.cpp * 作者:王昕彤 * 完成日期: 2013年 6 月 3 日 * 版本號: v1.0 * 輸入描述:抽象基類CSolid * 問題描述: * 程式輸出: */ #include <iostream> using namespace std; class CSolid //抽象基類 { public: virtual double areas() const=0;//表面積 virtual double volume() const=0;//體積 }; class CCube:public CSolid//正方體 { private: double light;//邊長 public: CCube(double l):light(l) {}; double areas()const; double volume()const; }; double CCube::areas()const { return light*light*6; } double CCube::volume()const { return light*light*light; } class CBall:public CSolid//球體 { private: double radius;//半徑 public: CBall(double r):radius(r) {}; double areas()const; double volume()const; }; double CBall::areas()const { return 4*3.14*radius*radius; } double CBall::volume()const { return (4/3)*3.14*radius*radius*radius; } class CCylinder:public CSolid//圓柱體 { private: double baseradius,height;//底面半徑和高 public: CCylinder(double b,double h):baseradius(b),height(h) {}; double areas()const; double volume()const; }; double CCylinder::areas()const { return 2*3.14*baseradius*baseradius+2*3.14*baseradius*height; } double CCylinder::volume()const { return 3.14*baseradius*baseradius*height; } int main() { CSolid *p; double s,v; CCube c1(5);//建立CCube類物件c1,引數為長方體邊長 p=&c1; s=p->areas(); v=p->volume(); cout<<"長方體的邊長為5"<<endl; cout<<"其表面積為:"<<s<<endl; cout<<"其體積為:"<<v<<endl; cout<<endl; CBall r1(10.2);//建立CBall類物件r1,引數為球體的半徑 p=&r1; s=p->areas(); v=p->volume(); cout<<"球體的半徑為10.2"<<endl; cout<<"其表面積為:"<<s<<endl; cout<<"其體積為:"<<v<<endl; cout<<endl; CCylinder t1(4.5,8.4); //建立CCylinder類物件t1,引數為圓柱體的底面半徑和高 p=&t1; s=p->areas(); v=p->volume(); cout<<"圓柱體的底面半徑為4.5,高為8.4"<<endl; cout<<"其表面積為:"<<s<<endl; cout<<"其體積為:"<<v<<endl; cout<<endl; return 0; }
執行結果: