C++多态
2016-01-05 17:05
435 查看
ifndef _FRACT_H_ #define _FRACT_H_ #include <iostream> using namespace std; class Fract { int n;//分子 int d;//分母 public: Fract() :n(0), d(1) {}; Fract(int an, int ad) :n(an), d(ad) {}; virtual void show() { cout << "父类show被调用了!" << endl; } int value() { return n*d; } }; class Dai :public Fract { int m; public: Dai() :m(0), Fract(1, 1) {} Dai(int am, int an, int ad) :m(am), Fract(an, ad) {} void show() { cout << "子类show被调用了!" << endl; } int value() { return m*Fract::value(); } }; #endif #include"Fract.h" #include<iostream> using namespace std; int main() { Fract f; f.show(); cout << "f=" << f.value() << endl; Dai f1; f1.show(); cout << "f1=" << f1.value() << endl; //此处用指针调用show,因为指针p还是Fract对象,因此此处仍然调用的是 //父类Fract的show //把父类中的show声明为虚函数,则show就具有多态性,在调用show的时候 //会根据对象的实际内容调用相应的方法,在这里,因为指针p是Fract父类对象 //但是p指向的是Dai对象,即p实际的内容是Dai对象,因此在把父类中的show声明为 //虚函数之后,此处调用的就是子类Dai中的show,而不是父类的show //除了指针,还有引用也是这样 Fract* p = NULL; p = &f1; p->show(); system("pause"); return 0; }
相关文章推荐
- C++11多线程(九):《atomic类型详解一:atomic_flag介绍》
- C/C++小知识总结之五
- 转:值得推荐的C/C++框架和库(真的很强大)
- C语言预处理指令
- C++11多线程(八):std::condition_variable 详解
- C++环形矩阵填充实现
- 如何学习C语言
- c++ covariant return type
- C++中静态成员函数和非静态成员函数的区别
- C++文件读写 打开方式等比较全
- c++ 函数返回引用
- C++中引用与指针的区别(详细介绍)
- C++,为什么str=new char[strlen(s)+1];中要加一
- C++11多线程(七):《<future> 详解三:std::future & std::shared_future》
- C++中复制构造函数与重载赋值操作符总结
- C++11多线程(六):《<future> 详解二:std::packaged_task 介绍》
- C语言记忆强化1
- C++补全计划1
- c++ exports def文件
- 浅谈C语言的数据存储(二)