Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Не могу разобраться с указателями в ООП С++. Помогите, пожалуйста.

Stas Dobretsov Ученик (115), на голосовании 6 лет назад
Как здесь сделать указатель, чтобы я мог переприсваивать значение объекту?

#include "iostream"

using namespace std;

class MyClass
{
private:

public:
int num;
MyClass() : num(0)
{}

MyClass(int n) : num(n)
{}

int getNum()
{
return num;
}

MyClass& MyClass::operator=(MyClass& v)
{
num = v.num;
return *this;
}
};

int main()
{
MyClass obj = 5;
cout << obj.num;
obj = 7;//ЗДЕСЬ ОШИБКА

cin.get();
return 0;
}
Голосование за лучший ответ
Я Красавчег Мыслитель (8244) 6 лет назад
Значение объекту не присвоите! Объект - структура, которая в себе содержит данные и функции, а указатель на объект это просто указатель. В вашем случае есть два варианта изменить num. obj.num = 7; Или при создании объекта MyClass obj(5); В данном случае это не указатель, при использовании указателя вместо точки используется ->
obj = new(MyClass);
obj->num = 7;
Алексей Мудрец (13611) 6 лет назад
>чтобы я мог переприсваивать значение объекту?
Объяви operator = () с соответствующим типом. Ну, или шаблонным сделай и класс, и оператор:

template <class T>
class Test {
public:
Test(T value): value(value) {}
Test operator= (T const& rhs) {
value = rhs.value;
return *this;
}
private:
T value;
};
Похожие вопросы