簡體   English   中英

可以重載賦值運算符以返回 class 的屬性值嗎?

[英]Can assignment operator be overloaded to return the value of a property of a class?

我想使用賦值運算符返回 class 的屬性值。 我試圖實現這個目的。 我在 web 上進行了很多搜索,但我訪問的所有網站都談到了如何重載賦值運算符,就像 class 的復制構造函數一樣: class_t& operator=(class_t&); . 誰能幫我重載此運算符以返回 class 的屬性值?

這是我的代碼:

class A_t
{
private:
  int value = 0;

public:
  int operator = (A_t);  // I failed to overload assignment operator for this
  A_t& operator = (int); // I succeeded to overload assignment operator for this
  int Value();
  void setValue(int);
};

A_t& A_t::operator = (int value)
{
  this->setValue(value);
  return *this;
}

int operator = (A_t &data)
{
  return data.value;
}

int A_t::Value() { return this->value; }
void A_t::setValue(int data) { this->value = data; }

int main()
{
    A_t object = 3;
    int value = object; // Error: cannot convert 'A_t' to 'int' in initialization

    cout << value << endl;
    return 0;
}

為此,您的 class 需要一個int運算符,它在分配給 integer 時返回變量。 加上 class 錯過了A_t object = 3; . 修正后的 class 看起來像這樣,

class A_t
{
private:
    int value = 0;

public:
    //int operator = (A_t);  <-- You dont need this.
    A_t& operator = (int); // I succeeded to overload assignment operator for this
    int Value();
    void setValue(int);

    /**
     * Construct using an integer value.
     * 
     * @param val: The value to be set.
     */
    A_t(int val) : value(val) {}

    /**
     * int operator.
     * 
     * @return The value stored inside.
     */
    operator int() const
    {
        return value;
    }

    /**
     * int& operator (optional).
     *
     * @return The variable stored inside.
     */
    operator int& ()
    {
        return value;
    }
};

A_t& A_t::operator = (int value)
{
    this->setValue(value);
    return *this;
}

int A_t::Value() { return this->value; }
void A_t::setValue(int data) { this->value = data; }

int main()
{
    A_t object = 3;
    int value = object; // Error: cannot convert 'A_t' to 'int' in initialization

    cout << value << endl;
    return 0;
}

不能為此重載operator = 您可以做的是重載 class 中的隱式轉換為int運算符:

operator int() const { return value; }

但是,請仔細考慮在您的情況下這是否真的是一個好主意。 通常應該不惜一切代價避免隱式轉換,因為它非常容易出錯(許多聰明的人認為 C++ 根本不應該允許定義自定義隱式轉換。)。

暫無
暫無

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

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