0

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

我问的原因是因为我知道“字符串”不是真正的数据类型,而是本质上是一个 char 数组。这意味着当你包含字符串时,它以某种方式能够用赋值运算符做一些有趣的事情。而不必像下面这样分配一个变量:

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

你可以简单地说:

string word = "hello";

如果想用其他类型的数组做类似的事情怎么办?假设我想要一个整数数组并将它们分配为:

Foo intarray = 13235;

而不是说:

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

我该怎么做?可能吗?

4

1 回答 1

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

于 2013-05-13T05:55:46.287 回答