Реализация operator =
От: Mmmaloy Германия  
Дата: 01.10.04 23:05
Оценка:
Помогите, чето совсем запутался:
Надо оператор = для своего класса определить
Если в самом описании класса делаю, то работает:
public:
CMyClass& operator = (CMyClass &obj)
{
    p1    = obj.p1;
    p2    = obj.p2;
    ...
        
    return obj;
};    //определение оператора +


Как только выношу реализацию за пределы, не компилится:

class CMyClass
{
...
public:
CMyClass& operator = (CMyClass &obj)
...
// реализация
CMyClass::CMyClass operator = (CMyClass &obj)    
{
    p1    = obj.p1;
    p2    = obj.p2;
    ...
        
    return obj;
};


В чем дело?
Спасибо
Re: Реализация operator =
От: _nn_ www.nemerleweb.com
Дата: 01.10.04 23:09
Оценка: 2 (1)
Здравствуйте, Mmmaloy, Вы писали:

M>Помогите, чето совсем запутался:

M>Надо оператор = для своего класса определить
M>Если в самом описании класса делаю, то работает:
M>
M>public:
M>CMyClass& operator = (CMyClass &obj)
M>{
M>    p1    = obj.p1;
M>    p2    = obj.p2;
M>    ...
        
M>    return obj;
M>};    //определение оператора +
M>

Может все же CMyClass& operator = (const CMyClass &obj)

M>Как только выношу реализацию за пределы, не компилится:


M>
M>class CMyClass
M>{
M>...
M>public:
M>CMyClass& operator = (CMyClass &obj)
M>...
M>// реализация
M>//CMyClass::CMyClass operator = (CMyClass &obj)    
CMyClass& CMyClass::operator = (CMyClass& obj)
//CMyClass& CMyClass::operator = (const CMyClass& obj)
M>{
M>    p1    = obj.p1;
M>    p2    = obj.p2;
M>    ...
        
M>    return obj;
M>};
M>


M>В чем дело?

M>Спасибо
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Реализация operator =
От: Carc Россия http://www.amlpages.com/home.php
Дата: 01.10.04 23:10
Оценка:
Здравствуйте, Mmmaloy, Вы писали:

M>Помогите, чето совсем запутался:

M>Надо оператор = для своего класса определить
M>Если в самом описании класса делаю, то работает:
M>
M>public:
M>CMyClass& operator = (CMyClass &obj)
M>{
M>    p1    = obj.p1;
M>    p2    = obj.p2;
M>    ...
        
M>    return obj;
M>};    //определение оператора +
M>


M>Как только выношу реализацию за пределы, не компилится:


M>
M>class CMyClass
M>{
M>...
M>public:
M>CMyClass& operator = (CMyClass &obj)
M>...
M>// реализация
M>CMyClass::CMyClass operator = (CMyClass &obj)    
M>{
M>    p1    = obj.p1;
M>    p2    = obj.p2;
M>    ...
        
M>    return obj;
M>};
M>


M>В чем дело?

M>Спасибо
Абдула! Руки то опусти

...        
M>    return obj;
M>};

точку с запятой убери после тела фунции и в header-версии она тоже не надо
Aml Pages Home
Re: Реализация operator =
От: Павел Кузнецов  
Дата: 01.10.04 23:11
Оценка: 2 (1)
Mmmaloy:

> Как только выношу реализацию за пределы, не компилится:


См. выделенное:

>
> class CMyClass
> {
> ...
> public:
> CMyClass& operator = (const CMyClass &obj);
> ...
> // реализация
> CMyClass& CMyClass::operator = (const CMyClass &obj)    
> {
>     p1    = obj.p1;
>     p2    = obj.p2;
>     ...
>         
>     return *this;
> }
>
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re: Реализация operator =
От: Mmmaloy Германия  
Дата: 01.10.04 23:54
Оценка:
Спасибо всем, сделал как рекомендовали const добавил и return *this;:
CMyClass& CMyClass::operator = (const CMyClass& obj)
{
....

return *this;
}

А вот на счет убрать точку с запятой с Carc в корне не согласен.
Re[2]: Реализация operator =
От: Андрей Тарасевич Беларусь  
Дата: 02.10.04 02:13
Оценка:
Здравствуйте, Mmmaloy, Вы писали:

M>Спасибо всем, сделал как рекомендовали const добавил и return *this;:

M>
M>CMyClass& CMyClass::operator = (const CMyClass& obj)
M>{
M>....

M>return *this;
M>}
M>

M>А вот на счет убрать точку с запятой с Carc в корне не согласен.

Почему именно не согласен? В первом твоем варианте она была не обязательна. А во втором вообще является синтаксической ошибкой.
Best regards,
Андрей Тарасевич
Re[2]: Реализация operator =
От: Аноним  
Дата: 02.10.04 07:03
Оценка:
>>
>> class CMyClass
>> {
>> ...
>> public:
>> CMyClass& operator = (const CMyClass &obj);
>> ...
>> // реализация
>> CMyClass& CMyClass::operator = (const CMyClass &obj)    
>> {
>>     p1    = obj.p1;
>>     p2    = obj.p2;
>>     ...
>>         
>>     return *this;
>> }
>>

Ну а еще можно проверить на self-assignment...
Re[3]: Реализация operator =
От: Mmmaloy Германия  
Дата: 02.10.04 12:29
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

M>>А вот на счет убрать точку с запятой с Carc в корне не согласен.


АТ>Почему именно не согласен? В первом твоем варианте она была не обязательна. А во втором вообще является синтаксической ошибкой.


Все варианты перепробовал — без проблем глотает MSVC++2003net;
Почему присутствие линшего";" — должно быть синтаксической ошибкой? Вот недостача — тогда да. Извиняюсь, если чего не так понимаю.
Re[3]: Реализация operator =
От: Павел Кузнецов  
Дата: 02.10.04 14:45
Оценка:
>>>
>>> CMyClass& CMyClass::operator = (const CMyClass &obj)    
>>> {
>>>     p1    = obj.p1;
>>>     p2    = obj.p2;
>>>     ...
>>>     return *this;
>>> }
>>>


> Ну а еще можно проверить на self-assignment...


Если смотреть на представленный код, это вряд ли представляет опасность. Правда, в "..." может быть все, что угодно
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[4]: Реализация operator =
От: Андрей Тарасевич Беларусь  
Дата: 03.10.04 05:38
Оценка:
Здравствуйте, Mmmaloy, Вы писали:

M>>>А вот на счет убрать точку с запятой с Carc в корне не согласен.


АТ>>Почему именно не согласен? В первом твоем варианте она была не обязательна. А во втором вообще является синтаксической ошибкой.


M>Все варианты перепробовал — без проблем глотает MSVC++2003net;

M>Почему присутствие линшего";" — должно быть синтаксической ошибкой?

В смысле — почему? Потому что язык С++ не разрешает такого использования ";". Вот собственно и все.

А разрешает ли это твой конкретный компилятор — это вопрос второстепенный. Этот вопрос тут уже не раз обсуждался. Твой компилятор (как и многие другие компияторы) разрешает пустую декларацию. Вот поэтому он и пропускает эту ";". Тем не менее в языке С++ пустая декларация запрещена.
Best regards,
Андрей Тарасевич
Re: Реализация operator =
От: ScorpZ Украина  
Дата: 12.10.04 15:43
Оценка:
Здравствуйте, Mmmaloy, Вы писали:

M>Помогите, чето совсем запутался:

M>Надо оператор = для своего класса определить
M>Если в самом описании класса делаю, то работает:
M>
M>public:
M>CMyClass& operator = (CMyClass &obj)
M>{
M>    p1    = obj.p1;
M>    p2    = obj.p2;
M>    ...
        
M>    return obj;
M>};    //определение оператора +
M>


M>Как только выношу реализацию за пределы, не компилится:


M>
M>class CMyClass
M>{
M>...
M>public:
M>CMyClass& operator = (CMyClass &obj)
M>...
M>// реализация
M>CMyClass::CMyClass operator = (CMyClass &obj)    
M>{
M>    p1    = obj.p1;
M>    p2    = obj.p2;
M>    ...
        
M>    return obj;
M>};
M>


M>В чем дело?

M>Спасибо


попробуй вот так

class CMyClass
{
...
public:
CMyClass& operator = (CMyClass &obj)
...
// реализация
CMyClass & CMyClass::operator = (CMyClass &obj)
{
p1 = obj.p1;
p2 = obj.p2;
...

return obj;
};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.