c++中操作符的继承
Inheritance of operators in c++
我在这个网站上读过很多类似的问题,但没有一个能回答我想做的。
public class base {
public:
base(){
//Default Constructor
}
base( int num ){
// use num to create base
}
base& operator=( base&& _data ){
// do move assignment stuff
}
};
public class derived : public base {
public:
derived() : base() {
int num1;
//Do some stuff
// Now I want to assign the base of this class with a new base
base::operator=( Base( num1 ) );
}
};
我想在派生类的构造过程中调用基类上的move赋值(或只是常规赋值)。这样,派生类可以在创建基类之前解析一些信息。这似乎行不通。有人有什么想法吗?
请记住,基类是在构造函数体进入之前初始化的。因此,使用您的方法,您首先初始化base
,然后通过赋值覆盖它。这可不妙。
使用委托构造函数和私有帮助函数:
class derived : public base {
private:
static int help () { /* Do some stuff */ }
// private constructor to be called with the helper values
derived (int i) : base (i) { }
public:
derived() : derived (help ()) { }
};
当然,在这种情况下,您可以通过
来定义构造函数derived () : base (help ()) { }
但是,如果必须为基类构造函数计算多个参数值,那么上面的委托构造函数方法就很有用了:
class base {
public:
base (int i, double d);
};
class derived : public base {
private:
struct BaseParams { int i; double d; };
static BaseParams help () {
BaseParams p;
/* Do some stuff and set p.i and p.d */;
return p;
}
// private constructor to be called with the helper values
derived (BaseParams const & p) : base (p.i, p.d) { }
public:
derived() : derived (help ()) { }
};
如果你真的想构造一个base
对象并移动它,使用base的move构造函数:
class base {
public:
base (int i, double d);
base (base &&);
};
class derived : public base {
private:
static base help () {
/* Do some stuff and finally construct a base object */;
return base { /* calculated parameters for constructor of base */ };
}
// private constructor to be called with a base object to move from
derived (base && b) : base (std::move (b)) { }
public:
derived() : derived (help ()) { }
// or simply derived () : base (help ()) { }
};
相关文章:
- 继承函数的重载解析
- 继承期间显示未知行为的子类
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 混合组合和继承的C++问题
- c++类继承和赋值操作符
- 带有抽象继承的后缀操作符++
- 带有继承的c++操作符重载
- 在继承std::vector的类中使用操作符[]
- 前缀和后缀操作符继承
- 是否可以继承赋值操作符?
- c++如何继承返回特定类型的操作符
- c++中操作符的继承
- 在抽象类层次结构中操作符=的复杂继承
- 继承类的操作符重载
- 通过继承专门化操作符模板
- c++,通过指针传递泛型数组,继承,错误:没有接受右操作数的操作符
- c++赋值操作符关于继承的问题