c++类的调用

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

#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



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值