zoukankan      html  css  js  c++  java
  • 2013搜狗校园招聘笔试题

    研习了Linux公社发布的2013搜狗校园招聘笔试题,还是有些收获的。



    //第一题:以下程序的输出是___________________
    class Base
    {
    public:
     Base(int j):i(j){}
     virtual ~Base(){}
     void func1(){i *= 10; func2();}
     int getValue(){return i;}
    protected:
     virtual void func2(){i++;}
    protected:
     int i;
    };
    
    class Child:public Base
    {
    public:
     Child(int j):Base(j){}
     void func1(){i *= 100; func2();}
    protected:
     void func2(){i += 2;}
    };
    
    int main()
    {
     Base* pb = new Child(1); //pb指向的是Child类对象
     pb->func1(); //func1不是虚函数,所以调用Base::func1()
     cout<<pb->getValue()<<endl; //同理调用Base的函数
     delete pb;
     return 0;
    }
    //至于func1中的func2函数调用。
    //一般成员函数默认会将this指针作为参数传递给自己,比如:
    // class A {
    //  public:
    //   void fun() {i = 5;}
    //  private:
    //   int i;
    // };
    // void main {
    //   A a;
    //   a.fun();
    // }
    //那么调用a.fun()时,会将指向a自己的this指针传递给fun函数,所以
    // void fun() {i = 5;}
    //等价于
    // void fun(A *this) {this.i = 5;}
    //所以在上面题目相当于调用func1(this),然后调用this.func2()将this传递给func2函数,
    //func2函数为虚函数,而这个this指针指向的实质是个Child对象,因此调用Child的func2函数。
    //因此答案是12


    //这个题目非常有意思。
    //第四题:程序出错在什么阶段:
    #include <iostream>
    using namespace std;
    
    int main()
    {
     http://www.linuxidc.com
     cout<<"welcome to linuxidc"<<endl;
    
     return 0;
    }
    
    //A:编译时;B:运行时;C:编译和运行时都出错;D程序运行正常
    
    //选D。因为http://www.linuxidc.com中//后面是注释,前面是标签(类似goto的标签)。(坑爹啊)



    #include <iostream>
    using namespace std;
    
    class A
    {
      public:
        void foo(){}
    };
    
    class B:virtual public A
    {
      public:
        void foo(){}
    };
    
    class C:virtual public A
    {
      public:
        void foo(){}
    };
    
    class D: public B,public C
    {
      public:
        void foo(){}
    };
    
    int main(int argc, char *argv[])
    {
      cout<<"A 的大小为: "<<sizeof(A)<<endl;
      cout<<"B 的大小为: "<<sizeof(B)<<endl;
      cout<<"C 的大小为: "<<sizeof(C)<<endl;
      cout<<"D 的大小为: "<<sizeof(D)<<endl;
      return 0;
    }
    //答案是1,4,4,8。需要继续充电...


  • 相关阅读:
    【每日一题-leetcode】98.验证二叉搜索树
    python第11天——核心篇3
    python第十天-核心篇2
    光盘文件传输到U盘的问题
    python第九天-核心篇1
    python第八天-飞机大战
    python第7天
    如何解决长时间写代码的颈椎等问题
    python第六天
    python第五天
  • 原文地址:https://www.cnblogs.com/wnarutou/p/2730323.html
Copyright © 2011-2022 走看看