【笔试题】【day17】

目录

第一题(迭代器指向问题)

第二题(虚函数的机制在构造和析构函数里面不会发生作用)

第三题(多态)


第一题(迭代器指向问题)

#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
    vector<int>array;
    array.push_back(100);
    array.push_back(300);
    array.push_back(300);
    array.push_back(300);
    array.push_back(300);
    array.push_back(500);
    vector<int>::iterator itor;
    for(itor=array.begin();itor!=array.end();itor++)
    {
        if(*itor==300)
        {
            itor=array.erase(itor);
        }
    }
    for(itor=array.begin();itor!=array.end();itor++)
    {
        cout<<*itor<<"";
    }
    return 0;
}

上面这个代码输出的是()

A 100 300 300 300 300 500
B 100 300 300 300 500
C 100 300 300 500
D 100 300

100        300        300        300        300        500

               here

100        300        300        300        500

                              here

100        300        300        500

                                             here

由于我们erase删除掉了一个元素之后,我们后面的元素是会向前挪动的,但是我们又人为地将迭代器++,所以按照我们上面的解释,有两个300没有成功删掉

C

第二题(虚函数的机制在构造和析构函数里面不会发生作用)

下面这段程序的输出是什么? 

class A{
public:
    A(){p();}
    virtual void p(){print("A")}
    virtual ~A(){p();}
};
class B:public A{
public:
    B(){p();}
    void p(){print("B")}
    ~B(){p();}
};
int main(int, char**){
    A* a=new B();
    delete a;
}

A AABB
B BBAA
C ABAB
D ABBA

虚函数的机制在构造和析构函数里面不会发生作用

如果构造函数是虚函数,多态不会发生作用。因为构造的时候,对象还没有构造完成。

析构函数声明成虚函数,我们的多态也不会产生,按照栈的规则,先析构子类,然后析构父类,那么如果虚机制还在运行,那么我们的子类已经被析构了,父类还想要去调动子类的同名函数,是不可能的 

释放父类的指针,会不会析构子类取决于有没有将父类的析构函数写成虚方法。 

先创建一个B对象,先构造A

由于我们上面所解释的多态不发挥作用,所以先打印一个A。

然后构造B,B对象只能调动自己的构造函数,打印B

然后再析构的时候,由于我们的父类的析构是虚函数,所以先析构子类,打印出一个B

然后再析构父类,打印出一个A

也就是ABBA

D

第三题(多态)

以下代码的运行结果为()

class Base {
public:
    Base() {
        echo();
    } virtual void echo() {
        printf("Base");
    }
};
class Derived:public Base {
public:
    Derived() {
        echo();
    } 
    virtual void echo() {
        printf("Derived");
    }
};
int main() {
    Base* base = new Derived();
    base->echo();
    return 0;
}

A DerivedDerivedDerived
B DerivedBaseDerived
C BaseDerivedBase
D BaseDerivedDerived

虚函数的机制在构造和析构函数里面不会发生作用

所以想要构造子类,就要先构造父类 

父类再构造的时候,虚机制不起作用,所以直接打印出一个Base

然后子类构造,调用自己的构造函数,打印出Derived

然后base是一个父类的指针,指向子类的对象,然后我们的echo又是虚函数,满足多态的调用条件,所以我们这里调用的是子类的echo函数,也就是再打印出一个Derived

也就是D

D

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桜キャンドル淵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值