您的位置:首页 > 其它

笔试题目收集(4)

2013-07-08 14:45 281 查看
1.求下列程序结果

#include"iostream"
using namespace std;

class A{
public:
void funA();
};
class B{
public:
void funB();
};

class C:public A,public B{

};
int main()
{
cout<<sizeof(C)<<endl;
system("pause");
return 0;
}


输出结果:1。 在没有虚函数的时候,类的继承关系不分配虚表,也就没有指向虚表的指针,至于为什么是1。
本来求
sizeof
应该是
0
。但当我们声明该类型的实例的时候,它必须在内存中占有一定的空间,否则无法使用这些实例。可以参考
http://blog.csdn.net/u010064842/article/details/9222005
第七题。

2.求下列程序输出结果

#include"iostream"
using namespace std;

class A{
public:
A(int num=0){this->num = num;}
virtual void fun1(){
cout<<"a="<<num<<endl;;
cout<<"A::fun1"<<endl;
}
virtual void fun2(){
cout<<"A::fun2"<<endl;
}
private:
int num;
};
class B{
public:
void funB(){};

};

class C:public A,public B{
};

int main()
{
typedef void(*FUN)();
A a(5);
C c,c1;
cout<<sizeof(A)<<endl;                                 //1
cout<<"a虚表的位置"<<(int *)*(int *)&a<<endl;           //2
cout<<"a中的num的值"<<*(int *)(((int *)&a)+1)<<endl;    //3
cout<<endl;
cout<<sizeof(C)<<endl;                                 //4
cout<<"c虚表的位置"<<(int *)*(int *)&c<<endl;           //5
cout<<"c1虚表的位置"<<(int *)*(int *)&c1<<endl;         //6
FUN f = (FUN)*(int *)*(int *)&a;
f();                                                   //7
system("pause");
return 0;
}

运行结果:



下面对结果分析:

//1:输出8,因为类中有虚函数,所以每个对象包含一个虚指针(4字节),再加上int类型(4字节)。

//2:(int *)*(int *)&a,(int *)&a取出a对象的地址并转换为int*指针,*(int *)&a取出第一个元素的值也就是虚指针的 值,(int *)*(int *)&a,(int *)&a 转换为(int *)打印。具体结构如下:



//3:分析跟2是一样的,详细如上面的图解。

//4:一个虚指针+num的存储空间。

//5:对象c的虚指针,同时也看到对象a和对象c的虚指针不是一个地方,即父类和子类的虚指针不一样。

//6:对象c1的虚指针,发现c和c1的指针是一样的,同类子对象虚指针是一样的。

//7: 调用虚函数,但是参数没传入,打印的是随机值。

注:(int *)&a,指针转换为相应的类型

3.下列程序程序输出结果

#include"iostream"
using namespace std;

class A{
public:
virtual void fun1(){}
};
class B{
public:
virtual void fun2(){};

};

class C:public A,public B{
char ch;
int num;
};

class D:public A{
public:long long data;
};

int main()
{
cout<<sizeof(A)<<endl;      //1
cout<<sizeof(C)<<endl;      //2
cout<<sizeof(D)<<endl;      //3
D d;
d.data = 25;
cout<<*(long long *)((int *)&d+2)<<endl; //4
system("pause");
return 0;
}


输出结果:



//1:A中含有一个虚指针,所以大小为4

//2:C继承自B、C,因为B和C都有虚函数,所以此时C中有两个虚指针,分别指向两个虚表。同时C还有char和int类型两个成员,这里同样需要考虑对界问题。且这个这个对界,从0开始对的。具体如下:



//3:D中只包含一个虚指针,但是含有long long类型元素(8个字节),这是也要考虑对界问题,具体如下:



//4:((int *)&d+2)将地址加到下面红色的地方,然后转换成long long*指针类型,再取出指针所指内容。验证了下面结构的正确性。



4.选择题

#include <stdio.h>
int main(){
int s;
scanf(“%d”,&s);
while(s >0)
{
Switch(s)
{
case 1:printf(“%d”,s+5);
case 2:printf(“%d”,s+4);break;
case 3:printf(“%d”,s+3);
default: printf(“%d”,s+2);break;
}
scanf(“%d”,&s);
}
}


这段代码输入1 2 3 4 5 0回车,输出结果是(A)

A、6566567

B、65665672

C、66667

D、666672

5、linux的cron后台常驻程序(daemon)用于(D)

A、负责文件在网络找的共享

B、管理打印子系统

C、跟踪管理系统信息和错误

D、管理系统日常任务的调度

说明:在Linux中,我们经常用到 cron 服务器来完成这项工作。cron服务器可以根据配置文件约定的时间来执行特定的作务。比如我们可以在配置文件中约定每天早上4点,对httpd 服务器重新启动,这就是一个计划任务;在Linux系统中,计划任务一般是由cron承担,我们可以把cron设置为开机时自动启动。cron启动后,它会读取它的所有配置文件(全局性配置文件/etc/crontab,以及每个用户的计划任务配置文件),然后cron会根据命令和执行时间来按时来调用度工作任务。

待续。。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: