您的位置:首页 > 其它

2013搜狗校园招聘笔试题

2012-10-21 00:08 411 查看
研习了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。需要继续充电...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: