假设
A是父类,里面有virtual fun()。
B、C是public继承的子类,override了fun()。
创建对象引用,多态有以下代码:
B b;
C c;
A& n=b;
A& m=c;
n.fun();
m.fun();
我在想,多态有什么意义呢?为什么要把子类引用给父类呢?这不是多次一举吗?
直接
B& n=b; C& m=c;
他不香吗?
反正都是两行代码,分配的内存空间也是一样大小的,性能也没有差别。
说白了,多态的意义就在于写代码更通解,并能够减少代码text区的容量(堆栈区应该不会变)。
以手机为例,Phone为基类,Huawei、Xiaomi、Apple是子类且已override虚函数,考虑以下代码:
【文章开头的非多态版】
int price_diff(Huawei&,Xiaomi&);
int price_diff(Xiaomi&,Huawei&);
int price_diff(Huawei&,Apple&);
int price_diff(Apple&,Huawei&);
int price_diff(Xiaomi&,Apple&);
int price_diff(Apple&,Xiaomi&);
Huawei mate40;
Xiaomi mi10;
Apple iphone11;
cout << price_diff(mate40,mi10) << endl;
cout << price_diff(iphone11,mi10) << endl;
//可以看到,当厂商种类多起来后,将要重载price_diff函数的个数为N的阶乘个。
【多态版】
int price_diff(Phone&,Phone&);
Huawei mate40;
Xiaomi mi10;
Apple iphone11;
cout << price_diff(mate40,mi10) << endl;
cout << price_diff(iphone11,mi10) << endl;
//可以看到,多态版很轻松就把Huawei,Xiaomi,Apple类传入函数,并会自动调用指定的override过的函数。