我想知道是否有一种使=运算符在声明类时触发类的构造函数(或任何方法)的方法
说
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";
有效
我该怎么办,第一种方法会起作用?
答案 0 :(得分:1)
我该怎么办才能使第一种方法起作用?
提供一个采用char const *
类型的参数的构造函数。
并使用构造函数的初始化列表初始化成员,而不是构造函数主体中的赋值。
顺便说一句:
foo obj = "new foo object";
不打operator=()
。
答案 1 :(得分:0)
您为什么不只使用构造函数(无论如何都应该声明为显式的,因此您想要的构造实际上是对IIRC的不良实践)? 只要做:
foo obj("bar");
变量也不应该具有默认的空值,默认的构造函数将正确创建它。
您还应该将variable
放在初始化列表中。