Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 351
#1

Перегружаю operator= - C++

29.08.2013, 18:58. Просмотров 271. Ответов 2
Метки нет (Все метки)

Всем здрасти!

Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
using namespace std;
 
class One
{
public:
    virtual ~One() {}
    virtual int getAge() const {return 0;}
    virtual void operator= (One*);
};
 
void One::operator= (One*i)
{
cout <<"\nFunc operator= (One) is run!\n";
One * ptr = new One;
//this = ptr;
}
 
class Two : public One
{
protected:
int itsage;
public:
    ~Two() {}
    Two(): itsage(7) {}
    Two(One&);
    int getAge() const {return itsage;}
    void setAge(int age) {itsage = age;}
    void operator=(One*);
 
};
 
void Two::operator=(One*i)
{
cout << "\nFunc operator= (Two) is run!\n";
One * ptr = new Two;
//this = ptr; //как вызывающему объекту присвоить новый адрес?
}
 
Two::Two(One&i)
{
itsage = ((Two)i).getAge();
}
 
int main()
{
One * ptr = new Two;
cout << "Ptr.itsage = " << (*ptr).getAge() << endl;
cout << "Adress Ptr = " << ptr << endl << endl;
One * ptr2 = 0;
(*ptr2) = ptr;
cout << "Ptr2.itsage = " << (*ptr2).getAge() << endl;
cout<< "Adress Ptr2 = " << ptr2 << endl << endl;
return 0;
}
Замысел у меня следующий: нужно, чтобы при (*ptr2) = ptr, создавался новый объект в динамической памяти, инициализировался значением itsage и присваивался объекту *this (ptr2)...

Комменты о том, что смысла в этом нет оставьте при себе - смысл кода в том, что я разбираюсь как это работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2013, 18:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегружаю operator= (C++):

Class & operator's |Error: undefined reference to operator - C++
Компилирует нормально, но когда хочу использовать оператор выдает ошибку:undefined reference to 'operator..(Fraction const&amp;, Fraction...

operator char() или operator int() - C++
Здорова госпдо! Снова ничо не ясно как всегда. Разбираю программку из книги Страуструпа, там он описывает класс String в нем есть ...

Вызов operator[] через operator[] const - C++
Перелистывал Майерса, наткнулся на код, подскажите пожалуйста почему он советует закомментированный вариант кода, не проще сделать как...

Реализация operator + через operator += - C++
внутри следующей темы возник вопрос, ответ на который так и не был получен: ...

Перегрузить операторы operator+() и operator*() в пользовательском классе "Комплексное число" - C++
Здравствуйте. Предлагаю заняться арифметикой. Создал прослейший класс, перегрузил операторы сложения и умножения, в конструкторе...

Operator +, operator += — какой через какой реализовывать? - C++
Для class Fraction { // ... public: Fraction operator + ( const Fraction&amp; right ) const; Fraction&amp; operator += ( const...

2
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
29.08.2013, 19:08 #2
BESSON_off, Это UB.
C++
1
2
One * ptr2 = 0;
(*ptr2) = ptr;
Разыменование нулевого указателя ни к чему хорошему не приведет. Поэтому на ваш вопрос корректно ответить невозможно.
Вызвать оператор = для объекта класса можно только, если объект уже существует (инициализирован).
1
BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 351
29.08.2013, 21:08  [ТС] #3
Цитата Сообщение от ForEveR Посмотреть сообщение
Вызвать оператор = для объекта класса можно только, если объект уже существует (инициализирован).
Это и есть самый рациональный ответ... не увидел очевидного... Спасибо.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2013, 21:08
Привет! Вот еще темы с ответами:

Чем "operator *=" отличается от "operator *"? - C++
снова застряла, не могу понять, чем этот оператор должен отличаться от оператора*.....? вот он, но это работает только в случае...

Expected init-declarator before "operator".expected `,' or `;' before "operator" - C++
Пример не мой. Пытаюсь у себя запустить и чтото неполучается. Ошибка на строке 24 Expected init-declarator before &quot;operator&quot;.Expected...

Operator* - C++
в этой программе мне надо умножить два числа a &amp; b ??? допустим в ob(2,5) перемножить 2 &amp; 5 #include&lt;iostream&gt; #include&lt;vector&gt; ...

Operator>> - C++
Привет, всем!!! У меня следующая проблема: при использовании operator&gt;&gt; внутри цикла while, т.е while(operator &gt;&gt; variable), выполняется...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru