Не получается распечатать поле класса

112
23 апреля 2021, 07:10

Изучаю С++. У меня есть такой код:

struct Cls {
    Cls(char c, double d, int i) {
        this->c = c;
        this->d = d;
        this->i = i;
    }
public:
    char getC() {
        return c;
    }
private:
    char c;
    double d;
    int i;
};
int main() {
    Cls *cls = new Cls(1, 2.0, 3);
    std::cout << (*cls).getC() << std::endl;
    return 0;
}

На консоль распечатывается пустая строка. Не понимаю почему.

Answer 1

А кстати, как у вас выглядит символ с кодом 1?... У меня (Windows) честно выводит рожицу :)

Если вы хотели увидеть 1, то нужно передавать символ, а не код 1:

new Cls('1', 2.0, 3);

А вообще я бы еще подчистил (это не принципиально) ваш код так:

struct Cls
{
    Cls(char c, double d, int i):c(c),d(d),i(i){}
    char getC() const { return c; }
private:
    char c;
    double d;
    int i;
};
int main()
{
    Cls *cls = new Cls('1', 2.0, 3);
    std::cout << cls->getC() << std::endl;
}

Вкратце - в конструкторе не присваивать, а инициализировать. Если структура - лишний public ни к чему. Ну и функция-член, ничего ме меняющая - лучше делать ее константной.

READ ALSO
Вывести текст внутри скобок

Вывести текст внутри скобок

Вводится текст с клавиатуры, в тексте открываются скобки, внутри которых содержится другой текстНужно вывести этот другой текст через cout

121
Нетипизированный связной список

Нетипизированный связной список

Как бы я мог получить значение value из своей структуры Val?

112
Code blocks linux не компилируется алиас типа

Code blocks linux не компилируется алиас типа

Вопрос из разряда для начинающих, но учитывая что я под линуксом делаю свой первый проект - думаю это простительно

113
Параллельный вызов boost.python

Параллельный вызов boost.python

Пытаюсь из кода на python, распараллеленного с помощью ThreadPoolExecutor вызвать код на C++Создается впечатление, что в момент входа в C++ функцию все питоновские...

115