使用赋值运算符而不是在C ++中调用函数

时间:2013-05-13 05:51:04

标签: c++ visual-c++

我对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)”和“myVarGet()”。

我问的原因是因为我理解“string”不是真正的数据类型,而是一个char数组。这意味着当你包含字符串时,它有能力用赋值运算符做一些有趣的事情。而不必像以下那样分配变量:

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

你可以简单地说:

string word = "hello";

如果有人希望能够使用其他类型的数组执行此类操作,该怎么办?假设我想要一个整数数组并将其分配为:

Foo intarray = 13235;

而不是说:

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

我该怎么做?有可能吗?

1 个答案:

答案 0 :(得分:0)

所有所谓的作业都不是作业,而是初始化。

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 ++。