问题及代码:
/* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All right reserved. *文件名称:77.cpp *作 者:董凯琦 *完成日期:2016年5月6日 *版 本 号:v1.0 * *问题描述:按以下的提示,由基类的设计和测试开始,逐渐地完成各个类的设计,求出圆格柱体的表面积、体积并输出并且完成要求的计算任务: (1)先建立一个Point(点)类,包含数据成员x,y(坐标点),实现需要的成员函数,并设计main函数完成测试; (2)以Point为基类,派生出一个Circle(圆)类,增加数据成员r(半径),以及求面积的成员函数area,实现其他需要的成员函数,设计main函数完成测试; *输入描述: *程序输出: */ #include <iostream> using namespace std; class Point { public: Point(double x=0,double y=0);//Point 类构造函数 void putPoint(double,double);//改变坐标 double getX( ) {return x;} double getY( ) {return y;} void show(); protected: double x,y; }; Point::Point(double a,double b)//实现构造函数 { x=a; y=b; } void Point::putPoint(double a,double b) { x=a; y=b; } void Point::show() { cout<<"("<<x<<","<<y<<")"<<endl; } class Circle:public Point //定义Point的派生类Circle { public: Circle(double x=0,double y=0,double r=0);//Circle类构造函数 void setRadius(double); double getRadius(); double area(); void show(); protected: double radius; }; Circle::Circle(double a,double b,double r):Point(a,b),radius(r){}//派生类Circle的构造函数的实现 void Circle::setRadius(double r) { radius=r; } double Circle::getRadius() { return radius; } double Circle::area() { return 3.14*radius*radius; } void Circle::show() { cout<<"Center=("<<x<<", "<<y<<"), r="<<radius<<", area="<<area( )<<endl; } int main() { Circle c(3.1,4.1,5.1); cout<<"原圆形为:"<<endl; c.show(); c.putPoint(1,1); cout<<"现圆形为:"<<endl; c.show(); return 0; }
运行结果:
知识点总结:
从这个程序中,我们认识到了派生类定义的方法。需要注意以下几点:
1.要注意派生类函数的继承方式
2.在生命派生类的构造函数时,Point(a,b)中的a,b对应的是
Circle(double a,double b,double r)中的a,b。如果<pre name="code" class="cpp">Circle(double a,double b,double r)中的a,b变为c,d则Point(a,b)变为Point(c,d)
3.既然继承方式是public类,则在派生类函数里面可以直接访问基类的公有函数。
学习心得:
通过派生类的构造函数调用基类的构造函数有两种方式,隐式和显式两种。所谓隐式方式就是在派生类的构造函数中不指定对应的基类的构造函数,这个时候调用的是基类的默认构造函数(即含有默认参数值或不带参数的构造函数)。而所谓显式方式,就是在派生类的构造函数中指定要调用的基类的构造函数,并将派生类构造函数的部分参数值传递给基类构造函数。注:除非基类有默认的构造函数,否则必须采用显式调用方式。
时间: 2024-10-16 13:52:51