100分求助,虚函数的一个问题
时间:2011-12-11
来源:互联网
fun(&cir);
哪里指向根基类了?请教。
#include <iostream.h>
const double PI=3.14159;
class Point
{
public:
Point(double i, double j){x=i;y=j;}
virtual double Area(){return 0.0;}
private:
double x, y; //点坐标
};
class Circle: public Point
{
double radius; //增加新成员"半径"
public:
Circle(double r, double i, double j)
:Point(i,j),radius(r){}
virtual double Area()
{ return PI*radius*radius;}
};
void fun(Point *p)
{ cout<<p->Area()<<endl; }
void main()
{
Circle cir(10,3,6);
fun(&cir);
}
作者: blase2234 发布时间: 2011-12-11
你传入&cir就自动转换为Point*了
而p->Area调用的其实是cir.Area
作者: yisikaipu 发布时间: 2011-12-11

作者: Demon__Hunter 发布时间: 2011-12-11
作者: blase2234 发布时间: 2011-12-11
{
Point *cir=new Circle(10,3,6);
fun(cir);
delete cir;
}
用这个main来体会一下吧
作者: mstlq 发布时间: 2011-12-11
作者: yby4769250 发布时间: 2011-12-11
#include <iostream> using namespace std; const double PI=3.14159; class Point { public: Point(double i, double j){x=i;y=j;} //注意Area是虚函数,在继承的时候要实现多态 virtual double Area(){return 0.0;} private: double x, y; //点坐标 }; class Circle: public Point { double radius; //增加新成员"半径" public: Circle(double r, double i, double j) :Point(i,j),radius(r){} //继承来自基类Point的Area方法,此方法是virtual virtual double Area() { return PI*radius*radius;} }; void fun(Point *p) { cout<<p->Area()<<endl; } int main() { Circle cir(10,3,6); //将派生类对象cir赋给基类Point类型 //多态在指针的时候起作用 fun(&cir); return 0; }
作者: elegant87 发布时间: 2011-12-11
将一个派生类对象赋给一个基类的对象时候在如下情况下实现多态
1、将派生类对象赋给一个基类的指针对象
2、将派生类对象赋给一个基类的引用
作者: elegant87 发布时间: 2011-12-11
这个时候p指向的是派生类对象cir
void fun(Point *p)
{
cout<<p->Area()<<endl;
}
作者: elegant87 发布时间: 2011-12-11
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28