我对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(.....)
我该怎么做?有可能吗?
答案 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 ++。