C++细节学习之类的实例化

来源:互联网 发布:苹果mac电脑办公软件 编辑:程序博客网 时间:2024/05/22 00:47

C++的实例化跟Java和C#的不一样,Java和C#的实例化都是直接用new或getInstance()实现。但是C++使用new是返回一个指针。

class Base{    public:    Base(){}    Base(int i){}    void func(){} private:};Base* p=new Base();Base b1;    //okBase b2(1);  //okBase b3();   //error,不需要括号Base  b3=new Base(); //error,返回的是指针//调用函数b1.func();         //okp->func();          //ok(*p).func();        //okb1->func();         //errorp.func();           //error

经由指针调用函数和实例化对象来调用函数有什么差别呢?

指针是动态完成调用函数,即是,首先得看该函数是不是虚函数,若是虚函数,就调用它指向对象的函数;如果不是虚函数,就调用该类型的函数。
而实例化对象时不管是不是虚函数,都是调用该类型的函数

//假设两个类,一个A,一个B,B是A的子类,A有两个函数 virtualfunc()//和nonvirtualfunc().B重写了这两个类A* P;A a;B b;a.virtualfunc();            //调用A::virtualfunc()a.nonvirtualfunc();         //调用A::nonvirtualfunc()b.virtualfunc();            //调用B::virtualfunc()b.nonvirtualfunc();         //调用B::nonvirtualfunc()p=&a;p->virtualfunc();           //调用A::virtualfunc(),虚函数调用指向的对象p->nonvirtualfunc();        //调用A::nonvirtualfunc(),有指针类型决定p=&b;p->virtualfunc();           //调用B::virtualfunc(),虚函数调用指向的对象p->nonvirtualfunc();        //调用B::nonvirtualfunc(),有指针类型决定
0 0
原创粉丝点击