【问题标题】:let '=' operator of a certain class run the constructor upon declaration让某个类的“=”运算符在声明时运行构造函数
【发布时间】:2018-10-06 22:15:56
【问题描述】:

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

我们说

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";

有效

我该怎么做才能使第一种方法有效?

【问题讨论】:

  • 提供一个接受const char *参数的构造函数,并使用它来初始化variable。此外 (1) 在构造函数中查找初始化列表的使用,而不是在构造函数主体中分配成员; (2) 通常认为让 operator=() 具有返回类型 foo & 而不是 void 是更好的技术,并且返回*this.
  • 您对this 的使用完全是多余的。
  • 对不起,我习惯使用“this”,因为我来自另一种编程语言

标签: c++ overloading operator-keyword


【解决方案1】:

我该怎么做才能让第一种方法奏效?

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

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

顺便说一句:

foo obj = "new foo object";

不调用operator=()

【讨论】:

    【解决方案2】:

    你为什么不直接使用构造函数(无论如何都应该声明为显式,所以你想要的构造实际上是不好的实践 IIRC)? 做吧:

    foo obj("bar");
    

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

    【讨论】:

    • 我已经修复了默认的空值并将其传递给构造函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多