观看一个例子:
- #include <iostream>
- using namespace std;
- class A{
- public:
- virtual void say() {
- cout<<"A say: "<<endl;
- }
- };
- class B :public A{
- public:
- void say() {
- cout<<"B say: "<<endl;
- }
- };
- void testVirtual(A& a) {
- a.say();
- }
- int main(void) {
- B b;
-
- testVirtual(b);
- return 0;
- }
|
#include <iostream> using namespace std; class A{ public: virtual void say() { cout<<"A say: "<<endl; } }; class B :public A{ public: void say() { cout<<"B say: "<<endl; } }; void testVirtual(A& a) { a.say(); } int main(void) { B b; //b.say("hello B"); testVirtual(b); return 0; } |
1. 注意 第6行的virtual关键字和第18行的引用传参
2. 现在的结果是 "B say:";
3. 如果去掉virtual关键字,或者传参的时候不使用引用传参,则,输出的结果都将是: "A say:"
4. 这种语法现象叫 upcast
5. c++ 中class声明类,要以分号结束
6. 参考资料: 《C++编程思想》之 第15章 多态性和虚函数
为什么18行需要引用传递?