合肥天地宽视信息科技有限公司c++开发笔试题

  • Post author:
  • Post category:其他




1、strlen和sizeof的区别?

(1)、sizeof是一个操作符,而strlen是库函数;

(2)、sizeof的参数可以是数据的类型,也可以是变量;而strlen只能以结尾为’0’的字符串作参数;

(3)、编译器在编译时就计算出了sizeof的结果,而strlen必须在运行时才能计算出来。

(4)、sizeof计算数据类型占内存的大小,strlen计算字符串实际长度。



2、对纯虚函数的理解,它的概念和作用?

(1)、虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。

(2)、纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加”=0″,例如:

virtual void func() =0;

声明了纯虚函数的类是一个抽象类。所以,用户不能创建类的实例,只能创建它的派生类的实例。所以类纯虚函数的声明就是在告诉子类的设计者,“你必须提供一个纯虚函数的实现,但我不知道你会怎样实现它”。

作用:在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。



3、在32位的操作系统上,char占1个字节,short占2个字节,int占4个字节,有两个结构体声明如下,sizeof(info)和sizeof(obj)分别是多少?


struct结构体的内存大小解析

typedef struct{
	char a;
	int b;
	char c;
}info; 
typedef struct{
	char name[10];
	short *count;
	char *addr;
	info f;
}obj;
int main()
{
	obj x;
	cout<<sizeof(info)<<endl;//12
	cout<<sizeof(obj)<<endl;//48
}



4、请写出char* const p; char const *p;const char *p三者的区别。

char* const p和char const *p相同,都是指针常量(指针是常量),声明了指针常量,说明指针变量不允许修改。如同次指针指向一个地址该地址不能被修改,但是该地址里的内容可以被修改;

const int *p:常量指针。常量指针本质是指针,并且这个指针是一个指向常量的指针,指针指向的变量的值不可通过该指针修改,但是指针指向的值可以改变。



5、



6、虚析构函数能在一定程度上防止内存泄漏,请举例解释原因?



多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码

虚析构函数是为了解决这样的一个问题, 基类的指针指向派生类对象,并用基类的指针删除派生类对象。

虚析构函数的概念和用法很简单,但它在面向对象程序设计中却是很重要的技巧。声明虚析构函数,即使基类并不需要析构函数,也显式地定义一个函数体为空的虚析构函数,以保证在撤销动态分配空间时能正确地处理。


虚析构函数解决内存泄漏问题



7、指出下面这段代码有错误的地方

**	int nSize=6;
	int *pNumber=new int[nSize];
	for(int i=0;i<nSize;i++)
	{
		cin>>*(pNumber++);
	}
	for(int i=0;i<nSize;i++)
	{
		cout<<*(pNumber++)<<endl;
	}
	delete[] pNumber;
	pNumber=NULL;**



版权声明:本文为ml29895063原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。