假设 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过的函数。