码迷,mamicode.com
首页 > 编程语言 > 详细

C++中的多态

时间:2015-09-01 00:03:29      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:多态

一. 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

C++中的多态

标签:多态

原文地址:http://9362125.blog.51cto.com/9352125/1690296

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!