C++多态原理探究以及案例测试

//
//  main.cpp
//  多态的原理,以及VPR指针
//
//  Created by 扆佳梁 on 16/8/2.
//  Copyright © 2016年 Eric. All rights reserved.
//

#include 
using namespace std;
class Parent{
public:
    Parent(int a = 0){
        this->a = a;
       // print();
    }
    
    virtual void print(){
        cout<<"Parent "<<"a:"<a = a;
        print();
    }
    
    void print(){
        cout<<"Parent "<b = b;
       // print();
    }
    void print(){
        
        cout<<"child"<<"b:"<print();
    /*
     C++的多态并不是通过判断是不是父类,还是子类,决定的.
     父类对象和子类对象分部有vptr 指针, 通过指针查找对应的虚函数表,找到虚函数的入口.
     这里是迟绑定,也就是在运行时去判断的.
     */
}



int main(int argc, const char * argv[]) {
    // insert code here...
    std::cout << "Hello, World!\n";
    
    //第一步测试 动态原理,引出 vptr 指针.
    Parent p1;
    Child  c1;
  //  playGround(&p1);
  //  playGround(&c1);
    
    //第二步 打印对象的内部大小,证明指针存在
    cout<<"sizeof(Parent):"<print();
    pC->print();
    
    
    pP++;
    pC++;
    
    pP->print();
    pC->print();
    
    pP++;
    pC++;
    
    pP->print();
    pC->print();

    
    //测试  发现 父类和子类的 大小不一样,就是属性变量不同的(这里如果子类没有int a属性)就会 宕掉
    //去掉 子类中的int a属性 则会调用成功.  在数组中一个子类对象 去进行增加,进行获取下一个元素,会由于地址增加大小不一,导致失败.
    //如题步长 看下图:
    return 0;
}

C++多态原理探究以及案例测试_第1张图片
ObjectDiagram2.png

你可能感兴趣的:(C++多态原理探究以及案例测试)