详解C++编程的多态性概念

2020-01-06 13:43:42王振洲

程序编译通过,运行结果为:

 

 
  1. original circle:(输出原来的圆的数据)  x=3.5, y=6.4, r=5.2, area=84.9486 
  2. new circle:(输出修改后的圆的数据)  Center=[5,5], r=7.5, area=176.714 
  3. pRef:[5,5] (输出圆的圆心“点”的数据) 

可以看到,在Point类中声明了一次运算符“ <<”重载函数,在Circle类中又声明了一次运算符“ <<”,两次重载的运算符“<<”内容是不同的,在编译时编译系统会根据输出项的类型确定调用哪一个运算符重载函数。main函数第7行用“cout<< ”输出c,调用的是在Circle类中声明的运算符重载函数。

请注意main函数第8行:

 

 
  1. Point & pRef = c; 

定义了 Point类的引用变量pRef,并用派生类Circle对象c对其初始化。前面我们已经讲过,派生类对象可以替代基类对象为基类对象的引用初始化或赋值(详情请查看:C++基类与派生类的转换)。现在 Circle是Point的公用派生类,因此,pRef不能认为是c的别名,它得到了c的起始地址, 它只是c中基类部分的别名,与c中基类部分共享同一段存储单元。所以用“cout<