#include <cassert>
#include <complex>
#include <iostream>
class Empty{};
Empty e;
Empty b = e;
Empty d;
Empty b = d;
Empty f(b);
//c98--同上
class Empty2
{
public:
//默认构造
Empty2() {}
//拷贝构造
Empty2(const Empty2&) {}
//重载 =
Empty2& operator = (const Empty2&) {return *this;}
//析构函数
inline ~Empty2() {}
};
//编译器为我们实现了几个类成员函数
class AnotherEmpty : public Empty
{
public:
//同上, 只是在构造的时候,还会调用一下基类构造函数
AnotherEmpty() : Empty() {}
};
class Void
{
public:
//如果已经写过构造函数,编译器会把剩下的成员函数生成
Void() {}
}
class NotEmpty
{
public:
//自己写了构造函数,编译器不会生成默认构造函数
NotEmpty (int a) : m_value(a) {}
private:
int m_value;
}
std::map<int, NotEmpty> m;
m[1] = NotEmpty(10); //出错
//因为map会先查找key=1,有则返回其值的引用;没有,则默认插入一个NotEmpty,且用NotEmpty的默认构造函数(这里NotEmpty没有默认构造)