• 【笔试题】【day17】


    目录

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

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

    第三题(多态)


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

    1. #include
    2. #include
    3. using namespace std;
    4. int main(void)
    5. {
    6. vector<int>array;
    7. array.push_back(100);
    8. array.push_back(300);
    9. array.push_back(300);
    10. array.push_back(300);
    11. array.push_back(300);
    12. array.push_back(500);
    13. vector<int>::iterator itor;
    14. for(itor=array.begin();itor!=array.end();itor++)
    15. {
    16. if(*itor==300)
    17. {
    18. itor=array.erase(itor);
    19. }
    20. }
    21. for(itor=array.begin();itor!=array.end();itor++)
    22. {
    23. cout<<*itor<<"";
    24. }
    25. return 0;
    26. }

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

    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

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

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

    1. class A{
    2. public:
    3. A(){p();}
    4. virtual void p(){print("A")}
    5. virtual ~A(){p();}
    6. };
    7. class B:public A{
    8. public:
    9. B(){p();}
    10. void p(){print("B")}
    11. ~B(){p();}
    12. };
    13. int main(int, char**){
    14. A* a=new B();
    15. delete a;
    16. }

    A AABB
    B BBAA
    C ABAB
    D ABBA

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

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

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

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

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

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

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

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

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

    也就是ABBA

    D

    第三题(多态)

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

    1. class Base {
    2. public:
    3. Base() {
    4. echo();
    5. } virtual void echo() {
    6. printf("Base");
    7. }
    8. };
    9. class Derived:public Base {
    10. public:
    11. Derived() {
    12. echo();
    13. }
    14. virtual void echo() {
    15. printf("Derived");
    16. }
    17. };
    18. int main() {
    19. Base* base = new Derived();
    20. base->echo();
    21. return 0;
    22. }

    A DerivedDerivedDerived
    B DerivedBaseDerived
    C BaseDerivedBase
    D BaseDerivedDerived

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

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

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

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

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

    也就是D

    D

  • 相关阅读:
    LeetCode 70. 爬楼梯
    写docx
    在使用npm安装插件时,npm报错ERESOLVE
    [Linux] 如何快速的git clone Linux的kernel
    C++算法 —— 动态规划(4)子数组
    MySQL 如何避免 RC 隔离级别下的 INSERT 死锁?
    优盘数据恢复如何操作?恢复U盘数据的三个简单方法
    翻译:Fully Convolutional Networksfor Semantic Segmentation
    Linux系统部署若依前后端分离项目(手把手教学)
    1217. 玩筹码-数学推导法
  • 原文地址:https://blog.csdn.net/weixin_62684026/article/details/127592382