c++类的调用

来源:互联网 发布:淘宝网网址是多少 编辑:程序博客网 时间:2024/06/05 00:26

去面试了几家公司,好像每家都出了类的调用,应该就是想考考继承和虚函数的用法。确实,不背出来,现场想还得花点时间。

#include <iostream>using  namespace std;class A{public:    A(){cout<<"1"<<endl;}    ~A(){cout<<"2"<<endl;}    virtual void print() {cout<<"this is A"<<endl;}};class B : public A{public:    B(){cout<<"3"<<endl;}    ~B(){cout<<"4"<<endl;}    virtual void print() {cout<<"this is B"<<endl;}};class C : public B{public:    C(){cout<<"5"<<endl;}    ~C(){cout<<"6"<<endl;}    virtual void print() {cout<<"this is C"<<endl;}};int main(){    A *test = new A();    test->print();    test = new B();    test->print();    C *c = new C();    c->print();    delete test;    delete c;    return 0;}

输出是:

1

this is A

1

3

this is B

1

3

5

this is C

2

6

4

2

首先用new会调用构造函数,输出1,和A的print(),基类指针可以指向子类的,因为是虚方法,所以调用了B的print,但为什么是1,3?先调用父类构造函数再调用子类的?用delete会调用析构函数,声明的是A类的指针,所以是2,delete c,出现6,4,2倒是好理解,

构造函数的调用顺序是1.先调用基类构造函数2.按声明顺序初始化数据成员3.最后调用自己的构造函数。所以调用构造函数是1,3,5