C++基础知识相关的题目汇总

对象和类

1.为什么在创建类对象时,既可以通过初始化的方式,也可以通过赋值来设置对象的值,应采用初始化的方式?

注:两种区别:

Stock stock1 = Stock(“Boffo Objects”,2,2.0); // 通过构造函数初始化stock1对象。
stock1 = Stock(“Nifty Foods”,10,50.0); //  通过赋值的方式给stock1对象以值

答:这两者有本质区别。第一种通过初始化的方式创建指定值的对象,可能会创建临时对象(也可能不会);第二条语句时赋值语句,像这样的赋值语句使用构造函数总会导致在赋值前创建一个临时对象。因此,当两种方式都可以设置对象值的时候,采用初始化的方式效率更高。

2 为什么按值传递类对象会导致调用析构函数,而按引用传递不会?

按值传递的时候,先调用类的复制构造函数,重新复制了这个类对象,然后又因为复制的变量作用域在函数中,函数执行完就会失效,所以会调用析构函数。
【类的复制构造函数,Class(const Class &) 在C++primer十二章讲解直接使用new,delete动态管理类成员内存分配的时候,涉及到这个问题,因为没有显式声明类复制构造函数,导致复制的类对象没有修改静态类成员,而复制的类对象作用结束时却会调用析构函数,从而修改静态类成员,导致了灾难性结果。】

数组和sizeof

int GetSize(int data[])
{
	return sizeof(data)	;
}
int _tmain(int argc,_TCHAR* argv[])
{
	int data1[] = {1,2,3,4,5};
	int size1 = sizeof(data1);
	int* data2= data1;
	int size2 = sizeof(data2);
	int size3 = GetSize(data1);
	printf("%d,%d,%d",size1,size2,size3);
}

有关于这个问题的输出是什么?我对于数组求sizeof的一些模糊概念在这里总结一下。
输出分别是20,4,4。data1是一个数组,sizeof(data1)是求数组的大小,这个数组包含5个整数,每个整数4个字节,所以共占用20个字节。data2声明为指针,尽管他指向了数组data1的第一个数字,但是他的本质仍然是一个指针,在32位系统上,对任意指针求sizeof,得到的结果都是4.[64位系统中都是8]。在C/C++中当数组作为函数参数进行传递时,数组自动退化成同类型的指针,所以size3的结果也是4。

vector

关于vector容器的应用,如果在vector末尾插入一个元素直接用a.push_back(b)即可,但是递归调用每次返回的都是一个vector,需要将整个vector插入到res最后,所有使用insert()函数。res.insert(res.end(),temp1.begin(),temp1.end());

猜你喜欢

转载自blog.csdn.net/weixin_35479108/article/details/88657014