Как передать параметр в C ++ с помощью оператора "=" - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть класс с именем Demo, и в этом классе я перегрузил метод Text() для установки и получения его закрытой переменной с именем text.

#ifndef DEMO_H
#define DEMO_H

#include <string>
#include <iostream>

using namespace std;

class Demo {
    string text;

public:
    Demo() {};
    Demo(string newText) : text(newText) {};
    void Text(string updatedText);
    string Text();
};
#endif // !DEMO_H


void Demo::Text(string updatedText) {
    text = updatedText;
}

string Demo::Text() {
    return text;
}

Затем в другом классе я использовал метод следующим образом-

#include "Demo.h"

int main()
{
    Demo d;
    d.Text("test");
    cout << d.Text() << endl;

    return 0;
}

Это отлично работает. Однако я хочу установить параметр метода с помощью оператора "=". Так что вместо

d.Text("test");

Я хочу сделать

d.Text = "test";

Возможно ли достичь в C ++ и если да, то как. Я думал о перегрузке оператора, но не смог достичь цели. Может кто-нибудь предложить, пожалуйста.

Ответы [ 3 ]

0 голосов
/ 06 сентября 2018

Правильный способ продолжить - это перегрузить оператор присваивания '=' и использовать его, как показано ниже.

class Demo {
    string text;

public:
    Demo() {};
    Demo(string newText) : text(newText) {};
    **void operator =(const string& val) { text = val; }**
    void Text(string updatedText);
    string Text();
};

int main()
{
    Demo d;
    //d.Text("test");
    d = "hello world";
    cout << d.Text() << endl;

    return 0;
}
0 голосов
/ 06 сентября 2018

Вы можете определить ваше свойство Text как объект T.T может затем перегрузить некоторые операции с общими свойствами (еще не выяснил, как будет реализован общий вызов геттера, такой как Object o; o.set(d.Text);):

#include <iostream>

using namespace std;

class T {
    string _text;
public:
    void operator =(const string& t) { _text = t; }

    friend ostream& operator<<(ostream& os, const T& obj)
    {
      cout << obj._text;
      return os;
    }
};

class Demo {
public:
    T Text;
};

int main()
{
    Demo d;
    d.Text = "test";
    cout << d.Text << endl;
}
0 голосов
/ 06 сентября 2018

Самое близкое, что вы можете получить в c ++ для выражения свойства , такого как функции getter / setter, как в c #, - это предоставить функции-члены класса, подобные этим:

class Demo {
    string text;

public:
    void Text(const string& updatedText) { text = updatedText; }
    const string& Text() const { return text; } 
};

Эта идиома часто используется в стандартной библиотеке c ++, например здесь .


Я хочу сделать

d.Text = "test";

Что вы можете сделать, это

class Demo {
public:
    string& Text() { return text; }
};

и

d.Text() = "test";

но это полностью противоречит концепции инкапсуляции данных.

...