让某个类的“ =”运算符在声明时运行构造函数

时间:2018-10-06 14:09:14

标签: c++ overloading operator-keyword

我想知道是否有一种使=运算符在声明类时触发类的构造函数(或任何方法)的方法

class foo
{
public:
string variable="";
foo(string var)
{
    this->variable=var;
}
foo(){}
void operator=(string var)
{
    this->variable=var;
}
} 
int main()
{
foo obj="new foo object";
}

运行该命令时,它显示“错误:请求从'const char [15]'转换为非标量类型'foo'”

但是当我这样做

foo obj;
obj="new foo object";

有效

我该怎么办,第一种方法会起作用?

2 个答案:

答案 0 :(得分:1)

  

我该怎么办才能使第一种方法起作用?

提供一个采用char const *类型的参数的构造函数。

并使用构造函数的初始化列表初始化成员,而不是构造函数主体中的赋值。

顺便说一句:

  

foo obj = "new foo object";

不打operator=()

答案 1 :(得分:0)

您为什么不只使用构造函数(无论如何都应该声明为显式的,因此您想要的构造实际上是对IIRC的不良实践)? 只要做:

foo obj("bar");

变量也不应该具有默认的空值,默认的构造函数将正确创建它。 您还应该将variable放在初始化列表中。