一天一道c++面试题(1)

        前段时时间辞职了,之前一直是从事linux应用程序开发,用的一直是c语言。老实说,c语言真的不是很好用,尽管其很高效,但是毕竟是面向过程的低级语言,开发起来很多东西都需要自己重新实现,第三方库可用的也比较少,因此大大的增加了开发时间。因此我决定要向高级的语言进行过渡,从相似性来说无疑c++是何其最接近的。奈何c++也是号称最难的语言啊,学习过程中也是有很多疑难杂症,因此打算来个一天一道c++面试题,以便巩固学习。

        前两天去面试了一家安防监控的公司,做了一份c++面试题,里面有一道关于多态的题我映像很是深刻,代码如下:

class A
{
public:
    A(int a,int b):
        m_a(a),
        m_b(b)
    {

    }

    A(){
        m_a=0;
        m_b=0;
    }

   //virtual void show()
    void show()
    {
        cout << "addr:"<< &m_a <<" "<<m_a << endl;
        cout << "addr:"<< &m_b <<" "<<m_b << endl;
    }

protected:
    int m_a,m_b;

};



class B: public A
{

public:
    B(int a,int b):
        m_a(a),
        m_b(b)
    {

    }

    B(){
        m_a=0;
        m_b=0;
    }

    //virtual void show()
    void show()
    {
        cout << "addr:"<< &m_a <<" "<<m_a +1 << endl;
        cout << "addr:"<< &m_b <<" "<<m_b +1 << endl;
    }
protected:
    int m_a,m_b;
};

int main()
{
   A *t1;
   B t2(1,2);

   t2.show();
   t1=&t2;
   t1->show();

}

输出结果为:
addr:0x61fe94 2
addr:0x61fe98 3
addr:0x61fe8c 0
addr:0x61fe90 0

 其打印结果显示表明,这种情况下,变量为什么类型,使用的函数就是该类型成员及函数,这种情况被称为静态多态,或者叫静态链接。

当在show()函数前加入virtual关键字的时,打印结果为:

addr:0x61fe94 2
addr:0x61fe98 3
addr:0x61fe94 2
addr:0x61fe98 3

可见,此时变量使用的成员及函数与实例化有关,实例化是什么类型,那么该实例空间使用的函数就是该实例真正的成员函数,这样就做到了与声明的变量无关,至于实例化有关,为动态链接。

virtual标记的函数为虚函数,左右就是为子类预留一个函数接口,让子类来进行实现并使用。

参考链接:http://www.runoob.com/cplusplus/cpp-polymorphism.html

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值