Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
 Аватар для OVERPOWER8
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224

Как передалеть operator= класса?

20.01.2010, 14:16. Показов 8398. Ответов 78
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот готовая программа, но там одна проблема - после использования оператора=, при изменении значений в одном объекте класса, они изменяются и в другом. Другими словами, как сделать так, чтобы вывод программы был:

Frisky's age: 5
whisker's age: 6

а не

Frisky's age: 5
whisker's age: 0

Вот код программы:

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 CAT
{
    public:
        CAT();
        ~CAT();
        
        int GetAge() const { return *itsAge; }
        int GetWeight() const { return *itsWeight; }
        void SetAge(int age) { *itsAge = age; }
        CAT& operator=(const CAT&);
    
    private:
        int* itsAge;
        int* itsWeight;
};
 
CAT::~CAT()
{
    delete itsAge; itsAge=0;
    delete itsWeight; itsWeight=0;
}
 
CAT::CAT()
{
    itsAge = new int;
    itsWeight = new int;
    *itsAge = 5;
    *itsWeight=9;
}
 
CAT& CAT::operator=(const CAT& rhs)
{
    if(this == &rhs)
        return *this;
    
    *itsAge=rhs.GetAge();
    *itsWeight=rhs.GetWeight();
    return *this;
}
 
int main()
{
    CAT Frisky;
    cout << "Frisky's age: " << Frisky.GetAge() << endl;
    Frisky.SetAge(6);
    
    CAT whiskers = Frisky;
    Frisky.SetAge(0);
    cout << "whisker's age: " << whiskers.GetAge() << endl;
    
    return 0;
}
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.01.2010, 14:16
Ответы с готовыми решениями:

operator+ как член класса
Могу ли я сделать operator+ как член класса таким образом? myClass&amp; myClass::operator+(const myClass&amp; other1, const myClass&amp;...

Как перенести operator из базового класса в производный?
Добрый день! Подскажите, пожалуйста, на простых примерах, как нужно работать с оператором перегрузки операций, если он находится в...

Класс: Почему этот operator+ не хочет работать как функция внутри класса?
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; class complex{ private: int re, im; public: complex(int r,...

78
 Аватар для OVERPOWER8
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
21.01.2010, 01:30  [ТС]
Студворк — интернет-сервис помощи студентам
>> CyBOSSeR (про указатели)

Использование динамической памяти для хранения переменных класса расширяет возможности их использования!
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
21.01.2010, 01:40
insideone, смысл сказанного немного в другом. Страуструп говорит о том, что если уж так нужен NULL, то не стоит использовать макрос NULL
C++
1
#define NULL 0
а вместо этого использовать константу
C++
1
const int NULL = 0;
В стандарте C++ ISO/IEC 14882:2003 про NULL написано следующее:
The macro NULL is an implementation-defined C++ null pointer constant in this International Standard
Значение NULL зависит от реализации и не всегда равен 0. Т.е. в отличии от 0 он является переносимым.

Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
Использование динамической памяти для хранения переменных класса расширяет возможности их использования!
Как именно расширяются возможности их использования? Пример можно какой-нибудь?
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
21.01.2010, 01:45
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Значение NULL зависит от реализации и не всегда равен 0. Т.е. в отличии от 0 он является переносимым.
Тогда и вправду лучше завести свой #define для удобства и безопасности (в том что NULL будет 0, а не чем то там вроде "implementation-defined C++ null pointer")? Т.к. NULL как то повышает читаемость кода и не хотелось бы отказываться от такого удобного указания.
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
21.01.2010, 01:53
Цитата Сообщение от insideone Посмотреть сообщение
Тогда и вправду лучше завести свой #define для удобства и безопасности
Как раз таки этого делать не стоит. Просто стоит использовать NULL, а вот уже его значение будет зависеть от платформы на которой будешь компилироваться.
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
21.01.2010, 01:58
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Как раз таки этого делать не стоит. Просто стоит использовать NULL, а вот уже его значение будет зависеть от платформы на которой будешь компилироваться.
Так нет же, Страуструп говорит что "использование нуля приведет к меньшим проблемам" (кстати сама фраза жесть, значит типа куда не пойдёшь все равно проблемы - большие или меньшие явный намек на ГРАБЛИ). Т.е. если мне допустим надо указать на то что указатель пуст я пишу
A = NULL;
Страуструп говорит пишите
A = 0; // (ну то что вместо этого константе - это не особо разница)
Получается, как вы говорите про NULL то что он может быть разным - т.е. если я напишу по совету Страуструпа я получу ошибку? Или я чего то недопонимаю...
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
21.01.2010, 02:05
Цитата Сообщение от insideone Посмотреть сообщение
Получается, как вы говорите про NULL то что он может быть разным - т.е. если я напишу по совету Страуструпа я получу ошибку?
Ответ на этот вопрос дал Evg здесь.
Цитата Сообщение от Evg Посмотреть сообщение
На сигнальных процессорах зачастую 0 является валидным адресом.
0
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
21.01.2010, 11:10
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
Использование динамической памяти для хранения переменных класса расширяет возможности их использования!
угу. вглубь и впоперёк.

Добавлено через 1 минуту
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Как именно расширяются возможности их использования? Пример можно какой-нибудь?
например в паттернах проектирования классы часто содержат указатель на другой класс, что делает возможным в runtime менять поведение/отношения класса.
0
 Аватар для OVERPOWER8
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
21.01.2010, 11:49  [ТС]
>> CyBOSSeR
(Как именно расширяются возможности их использования? Пример можно какой-нибудь?)

Да многократно. Посмотрите пример выше.
0
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
21.01.2010, 11:57
OVERPOWER8, я позволю себе уточнить вопрос CyBOSSeR. Думаю он это имел ввиду:
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Как именно в приведённом тобой коде расширяются возможности их использования?
1
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
21.01.2010, 16:04
Цитата Сообщение от zim22 Посмотреть сообщение
например в паттернах проектирования классы часто содержат указатель на другой класс, что делает возможным в runtime менять поведение/отношения класса.
С этим вариантам использования указателей для расширения возможностей класса все ясно как день.

Цитата Сообщение от zim22 Посмотреть сообщение
OVERPOWER8, я позволю себе уточнить вопрос CyBOSSeR. Думаю он это имел ввиду:
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Как именно в приведённом тобой коде расширяются возможности их использования?
zim22, ты абсолютно прав.

OVERPOWER8, каким образом использование указателя для хранения таких элементарных данных как возраст расширяет возможности (какие, куда)?
0
 Аватар для OVERPOWER8
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
21.01.2010, 17:43  [ТС]
>> CyBOSSeR >> zim22

А что это вы так привязались ко мне? Просто мне нравится использовать указатели и всё!
Иногда, конечно, сталкиваюсь с некоторыми проблемами, но они решаются сами по себе.

Вы что, предлагаете использовать обычные переменные в качестве членов класса? Если вдруг памяти не хватит, а обект класса будет создан - что дальше будет?
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
21.01.2010, 17:52
Если памяти не хватит - объект класса просто не будет создан. Вот и все.
А если ты будешь создавать члены класса в динамической памяти - под них что, разве памяти не потребуется?
0
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
21.01.2010, 17:59
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
А что это вы так привязались ко мне?
просто ты должен отвечать за свои слова. городишь какие-то фразы непонятные, ничем необоснованные. те, кто только знакомится с С++ - почитав твои некомпетентные посты могут сделать неправильные выводы.
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
21.01.2010, 20:14
Цитата Сообщение от zim22 Посмотреть сообщение
просто ты должен отвечать за свои слова. городишь какие-то фразы непонятные, ничем необоснованные. те, кто только знакомится с С++ - почитав твои некомпетентные посты могут сделать неправильные выводы.
zim22, +1.

Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
Иногда, конечно, сталкиваюсь с некоторыми проблемами, но они решаются сами по себе.
Причиной появления этой темы как раз таки явились проблемы из-за твоей безосновательной и опасной практики использования указателей для хранения элементарных данных, разве не так? Тебе уже не один человек доводы приводит против такого подхода.
0
21.01.2010, 20:21

Не по теме:

Каждому человеку своя грабля! Соблюдайте права граждан =)

0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
21.01.2010, 20:53
OVERPOWER8:
Такие вещи говоришь, будто ты всё знаешь,
а проблема в твоем посте решается как 2 пальца обо асфальт.
Зачем ты вообще создал тему, если ты такой умный, тебе наверное советы не нужны.
0
21.01.2010, 22:18

Не по теме:

Цитата Сообщение от insideone Посмотреть сообщение
Каждому человеку своя грабля!
Просто OVERPOWER8 прыгает на граблях, да еще и пытается доказать что это поведение имеет преимущества.
Мазохизм какой-то.

0
 Аватар для OVERPOWER8
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
21.01.2010, 23:49  [ТС]
>> CyBOSSeR >> Genius Ignat

Ладно, ладно. Беру свои слова обратно. Использование указателей усложняет программу, однако в некоторых случаях значительно увеличивает ей гибкость.

И вообще - я никому не советую и не рекомендую использовать указатели там где, "не надо". Пусть каждый использует что хочет. А я всё равно буду использовать указатели!
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
22.01.2010, 12:23
OVERPOWER8:
Если хочешь, узнать про гибкость прочитай про интеллектуальные указатели, от них пользы больше.

Если знаний и опыта мало, спорить бывает бесполезно.
Кто тому же бывает, что споры ни к чему хорошему не приводят, по себе знаю.
Хорошо что ты все понял.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.01.2010, 12:23

operator[][] для класса
Добрый день, создал класс где храниться массив, и хотелось бы иметь напрямю доступ через по типу class Matrix { .... int ** data; ...

Operator< для класса
Всем добра, что-то я туплю подскажите как определить operator&lt; для класса, в классе два значение если какое-нибудь меньше то тру. class...

Перегрузка operator* у класса Complex
Complex* Complex::operator*(const Complex&amp; other) const { Complex* product = this; *product *= other; return product; }...

Не работает operator<< шаблонного класса Vector
Компилятор выдает ошибку error LNK2019: unresolved external symbol &quot;class std::basic_ostream&lt;char,struct std::char_traits&lt;char&gt; &gt;...

Перегрузка operator>> для производного класса
Базовый класс: Taxi_Car.h: #pragma once #include&lt;string&gt; using namespace std; class Taxi_Car { string Marka;


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

Или воспользуйтесь поиском по форуму:
79
Ответ Создать тему
Новые блоги и статьи
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли Введение: Экологический рынок как игра с нулевой суммой Традиционная экология долгое время. . .
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ Введение: Синдром «цифрового учебника» Современные большие языковые модели (LLM) обладают колоссальным. . .
Главный вопрос моделирования сукцессии
anaschu 27.06.2026
главный вопрос. Если эктомикориза лучше добывает недоступный фосфор. И ее масса максимальна из всех. А широколиственный лес тоже имеет самую крутую биомассу. То почему не возникло их симбиоза? Это. . .
сукцессия 6. Питон реализация энилоджиковской модели, картинка про Центральную часть будущей модели
anaschu 26.06.2026
Етить. ИИ мне на основе моего старого файла R создал вот эту вот хмерь на пайтоне. Это уже новая модель, модель сукцессии грибной. потоки фосфора, азота. Углерода. 5 видов организмов. Я даже. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru