簡體   English   中英

使用賦值運算符而不是在C ++中調用函數

[英]Use assignment operator instead of calling a function in 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()”。

我問的原因是因為我了解“字符串”不是真正的數據類型,而是本質上是char數組。 這意味着當您包含字符串時,它可以通過賦值運算符以某種方式進行一些有趣的操作。 不必像下面那樣分配變量:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM