我希望B类继承除A类的几个方法之外的所有方法(假设它们都是可复制的),并且仍然可以轻易地复制。在C ++ 11中,我可以删除方法。举个例子:
class A { // trivially copyable
// private stuff here
public:
A& operator += (const A&);
// other public stuff here
};
class B: public A {
public:
B& operator += (const A&) = delete;
};
B是否可以复制?我知道有关删除特殊方法的问题,但复合赋值不是一种特殊的方法(对吧?)。
答案 0 :(得分:9)
是的,B
可以轻易地复制 - 无论您对非特殊成员函数做什么。
N3337,§9/ 6 :
平易可复制的课程是一个课程:
- 没有非平凡的 复制构造函数(12.8),
- 没有非平凡的移动构造函数 (12.8),
- 没有非平凡的副本分配操作员(13.5.3,12.8),
- 没有非平凡的移动赋值运算符(13.5.3,12.8)和 - 有一个简单的析构函数(12.4)。
但是复合赋值不是一种特殊的方法(对吧?)
不,不是。
N3337,§12/ 1 :
默认构造函数(12.1),复制构造函数和复制赋值 operator(12.8),移动构造函数和移动赋值运算符(12.8), 和析构函数(12.4)是特殊成员函数。
答案 1 :(得分:3)
我认为你是在正确的轨道上 - 如果A是可以轻易复制的,B是从A派生的,只是删除了一些常规方法(或运算符),B也可以轻易地复制。