class B {
public:
B() { cout << "B" << endl; }
B(const B&) = delete; //拷贝构造函数被定义为删除的
//其他成员,不包含移动构造函数
};
class D :public B {
//没有声明任何构造函数
};
D d; //正确,使用D的合成默认构造函数
D d2(d); //错误,D的合成构造函数是被删除的
D d3(std::move(d));//错误,隐式地使用D的被删除的拷贝构造函数class Quote {
public:
Quote() = default; //构造函数
Quote(const Quote&) = default; //拷贝构造
Quote(Quote&&) = default; //移动拷贝构造
Quote& operator=(const Quote&) = default; //拷贝赋值运算符
Quote& operator=(Quote&&) = default; //移动赋值运算符
virtual ~Quote() = default; //虚析构函数
};class Base {
//基类成员
};
class D :public Base {
public:
D(const D& d) :Base(d) //别忘记构造基类成员
{
//在函数体内拷贝构造本类成员
}
D(D &&d) :Base(std::move(d)) //别忘记移动基类成员
{
//在函数体内移动本类成员
}
};class Base {
//基类成员
};
class D :public Base {
public:
D& operator=(const D& rhs) {
Base::operator=(rhs); //为基类执行赋值运算符
//然后再执行本类的部分
return *this;
}
};class Disc_quote {
public:
Disc_quote(const std::string& book, double price, std::size_t qty, double disc)
:book(book), price(price), qty(qty), disc(disc)
{
cout << "A" << endl;
}
public:
std::string book;
double price;
std::size_t qty;
double disc;
};
class Bulk_quote :public Disc_quote {
public:
//虽然我们使用了using声明从基类中接收来了一个构造函数,但是
//我们还必须显式地给出一个构造函数,且为基类进行构造,否则不能创建Bulk_quote对象
Bulk_quote() :Disc_quote("Word", 1, 2, 3) {
cout << "B" << endl;
}
using Disc_quote::Disc_quote; //继承基类中的所有构造函数
};
int main()
{
Bulk_quote *a = new Bulk_quote(); //此处调用Bulk_quote的构造函数
cout << "********" << endl;
Bulk_quote *b = new Bulk_quote("Hello", 1, 2, 3); //此处调用从Disc_quote中的构造函数
return 0;
}

Bulk_quote(const std::string& book, double price, std::size_t qty, double disc):Disc_quote(book, price, qty, disc){}class A
{
public:
A(int a, int b = 10) :a(a) {}
private:
int a;
int b;
};
class B:public A {
public:
B() :A(1) {}
using A::A;
//此using语句相当于在B中定义了这样两个构造函数
/*
B(参数)::A(参数1, 参数2) {} //其中两个参数都要给出
B(参数)::A(参数1) {} //其中只要给出第一个参数
*/
};