在c++中使用赋值操作符而不是调用函数

visual Use assignment operator instead of calling a function in C++

本文关键字:调用 函数 赋值操作符 c++      更新时间:2023-10-16

我对c++相当陌生,所以它会扰乱我的googlefu。我想我只是不知道该问什么。

我想知道是否有可能这样做,以便您可以简单地使用赋值操作符将值传递给对象。

我能想到的与我所说的最接近的事情是当你使用@public和@myVar.setter时Python是如何工作的。然后你可以说:

class MyClass(object):
    @public
    def myVar(self):
        return self._myVar
    @myVar.setter
    def myVar(self, value):
        self._myVar = value;
MyClass.myVar = 12
Print MyClass.myVar

这将打印12,但不必调用myVar方法,因为函数通常调用"myVarSet(12)"answers"myVarGet()"。

我问的原因是因为我理解"字符串"不是一个真正的数据类型,而本质上是一个char数组。这意味着,当您包含string时,它以某种方式有能力对赋值操作符做一些有趣的事情。而不是像下面这样赋值一个变量:

char word[5] = { "h","e","l","l","o" };

你可以简单地说:

string word = "hello";

如果你想对其他类型的数组做类似的事情呢?假设我想要一个整数数组并对其进行如下赋值:

Foo intarray = 13235;

与其说:

Foo intarray;
intarray.setVar(.....)

我该怎么做呢?这可能吗?

你所有所谓的赋值都不是赋值,而是初始化。

string word = "hello";

复制初始化

string word;
word = "hello";

是初始化,然后赋值

是的,这完全有可能,你只需要重载赋值操作符:

class Foo{
   Foo& operator = ( whatever );
};

然而,这似乎不是你想要的。如果我没有弄错的话,您正在寻找一种使用某些值构造对象的方法,这就是构造函数的作用:

struct Foo{
    Foo(int x) : _x(x) {}
    int _x;
};

现在你不会写

Foo foo;
foo._x = 5;
直接

Foo foo(5);

Foo foo = Foo(5);

还需要一个公开可见的复制构造函数(在这种情况下,默认的编译器生成的构造函数就可以了)。如果你在管理资源,也要考虑"三原则"。

这些都是基本的东西,相信我,这里缩小了很多。你最好通过一本书来学习c++。