面试中遇到的 C++ 语言基础试题。
new 与 malloc 的区别
(2)对于非内部数据结构的对象而言,malloc 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数,由于 malloc 是库函数而不是运算符,不在编译器的控制权限之内,不能够把执行构造函数和析构函数的任务强加于 malloc/free。
(4)new 出来的是对象,而 malloc 出来的是 (void *)
如何禁用掉拷贝构造函数与赋值操作符?
附:浅拷贝指当一个类里有指针成员指向 new 出来的数据时,当用一个对象来初始化另一个对象的时候,若将数据重新 new 一个,则为深拷贝,否则为浅拷贝。浅拷贝容易造成的问题是当一个对象析构后另一个对象访问该指针会出问题。
一个空类,编译器会默认为它加上什么东西?
(2)拷贝构造函数
(4)赋值运算符
C++ 中向函数传递参数的方式
(2)指针传递
666 个苹果,10 个箱子,如何放能让客人买 1-666 个苹果都直接给若干箱子就行了。
二叉树的结点定义和求叶子数
求叶子数:递归解决。
什么时候调用拷贝构造函数?什么时候调用赋值运算符?
#include <iostream>
using namespace std;
class demo
{
public:
demo() { cout << "default constructor" << endl; }
demo(const demo& d) { cout << "copy constructor" << endl; }
demo& operator=(const demo& d) { cout << "= operator" << endl; }
~demo() {}
};
int main()
{
demo A;
demo B;
B = A;
demo C = A;
return 0;
}
default constructor
default constructor
= operator
copy constructor