多态是面向对象程序设计语言中数据抽象和继承之外的第三个基本特征。
目录
1.3 问题解决方案(虚函数,vitual function)
四、抽象基类和纯虚函数(pure virtual function)
c++支持编译时多态(静态多态)和运行时多态(动态多态),运算符重载和函数重载就是编译时多态,派生类和虚函数实现运行时多态。
静态多态和动态多态的区别就是函数地址是早绑定(静态联编)还是晚绑定(动态联编)。如果函数的调用,在编译阶段就可以确定函数的调用地址,并产生代码,就是静态多态(编译时多态),就是说地址是早绑定的。而如果函数的调用地址不能编译不能在编译期间确定,而需要在运行时才能决定,这这就属于晚绑定(动态多态,运行时多态)。
一、类型转换及问题
1.1
对象可以作为自己的类或者作为它的基类的对象来使用。还能通过基类的地址来操作它。取一个对象的地址(指针或引用),并将其作为基类的地址来处理,这种称为向上类型转换。
也就是说:父类引用或指针可以指向子类对象,通过父类指针或引用来操作子类对象。
class Animal{
public:
void speak(){
cout << "动物在唱歌..." << endl;
}
};
class Dog : public Animal{
public:
void speak(){
cout << "小狗在唱歌..." << endl;
}
};
void DoBussiness(Animal& animal){
animal.speak();
}
void test(){
Dog dog;
DoBussiness(dog);
}
|
1.2 问题解决思路
解决这个问题,我们需要了解下绑定(捆绑,binding)概念。
|
当绑定在程序运行之前(由编译器和连接器)完