一. C++中多态的定义:多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的字对象的特性以不同的方式运作。简单的说,就一句话:允许子类类型的指针赋值给父类类型的指针。
二. 动态绑定是多态的基础。
动态绑定的定义:在程序运行时刻,找到对象指针或引用所调用的正确的函数。
动态绑定的原理:为包含有virtual型的函数类建一个虚函数表(为指针数组),表内存储虚函数,当类调用构造函数时,会为每一个对象生成至少一个指向虚函数表的虚指针,当此类的对象调用虚函数时,会用虚指针指向虚表里 面的虚函数地址,从而正确调用函数。
三. 多态需要的条件。
1>要有 继承
2>函数的覆盖
3>要有虚函数
4>基类指针或者基类的引用指向派生类对象
上代码:
class A{
private:
int a;
public:
A(int i):a(i){}
virtual void print(){
cout<<"a="<<a<<endl;
}
int get_a(){ return a; }
};
class B{
private:
int b;
public:
B(int j):b(j){}
virtual void print(){
cout<<"b="<<b<<endl;
}
int get_b(){ return b; }
};
class C : public A,public B{
private:
int c;
public:
C(int i,int j,int k):A(i),B(j){ c=k; }
virtual void print(){
A::print();
B::print();
cout<<"c="<<c<<endl;
}
void get_ab(){ cout<<get_a()<<" "<<get_b()<<endl; }
};#include <iostream>
#include "Muti_Inheritance.h"
int main(int argc, const char * argv[])
{
// insert code here...
C x(5,8,10);
A *ap = &x; // A的指针指向C类对象
ap->print(); //输出A类中的print(由动态绑定实现)
x.A::print(); //输出A类的print
x.get_ab(); //(重写)调用C类的get_ab()
std::cout << "Hello, World!\n";
return 0;
}本文出自 “c0c0s” 博客,请务必保留此出处http://9362125.blog.51cto.com/9352125/1690296
原文:http://9362125.blog.51cto.com/9352125/1690296