С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Временно недоступен
 Аватар для #pragma
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926

Один объект не может дополнить другой

17.07.2009, 07:45. Показов 952. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть два объекта,принадлежащие этому классу.
variable_class.h
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
#include "value_class.h"
 
   class Variable
   {
       private:
 
              Value val;  // это тоже класс,описывающий константное значение
 
              string var_name; // Это имя
 
              bool defined;
 
       public:
              Variable (){};
              Variable (const string);
             ~Variable (){};
 
              string GetVarName () const {return var_name;};
 
              Value GetValue () const {return val;};
 
              bool IsDefined() const {return defined;}
              void SetDefinition(bool b){defined=b;}
 
              Value operator = (const Value& val);
 
   };

Один имеет только имя без значения,другой только значение без имени.
C++
1
2
3
            Variable *var_nameonly = new Variable(syntax_parserIdent()); // Этот получает только имя
 
            Variable* var_valueonly = new Variable(syntax_parserIdentLValue ()); // Этот только значение
Всё проверено,объекты существуют,всё ок.
Далее делаю такое присваивание :
C++
1
2
3
            // Now we have completed variable
            // With name and value
            *var_nameonly = *var_valueonly;
Вот сама перегрузка оператора "=":
C++
1
2
3
4
5
6
   Value Variable::operator = (const Value& next_val)
   {
       val = next_val;
 
       return val;
   }
По какой-то причине имя первого объекта затирается пустой строкой,а значение передаётся нормально.Хотя в перегрузке я передаю только значение val. Почему так происходит? Как можно решить данную проблему? Я понимаю,что всё связано с динамической памятью скорее всего,эта тема немного туманна пока.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.07.2009, 07:45
Ответы с готовыми решениями:

Реализовать двухсвязный список. Каждый элемент списка может содержать один объект
Здравствуйте, мне нужно было реализовать двухсвязный список. Каждый элемент списка может содержать один объект. Объект может быть трех...

Может ли объект-член, или объект-элемент достучаться к содержащему его?
Предположим, class A { ... }; class B { .... A a; ... };

При наведении на один объект - изменяем другой
как сделать так, что б при наведении мыши на <div class = "a_menu"> изменялся цвет ссылки (именно той ссылки, которая в задейсвеном...

5
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
17.07.2009, 08:18
ты написал перегрузку присваивания для класса Value.
а присваиваешь класс Variable.
твоя пергрузка сработает, если писать
C
1
*var_nameonly = (*var_valueonly).val;
а так, у тебя просто переменная var_nameonly заменяется на var_valueonly.

можно еще написать перегрузку
C++
1
2
3
4
5
6
   Value Variable::operator = (const Variable& next_val)
   {
       val = next_val.val;
 
       return val;
   }
p.s. если я, конечно, правильно понял, что ты хотел сделать...
1
Временно недоступен
 Аватар для #pragma
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
17.07.2009, 15:30  [ТС]
Нет,перегрузка у меня как раз в классе Variable,просто возвращает она значение Value.Спасибо,ошибка как раз в том,что надо было перегрузку типа
C++
1
2
3
4
5
6
   Value Variable::operator = (const Variable& next_val)
   {
       val = next_val.val;
 
       return val;
   }
То есть в моём случае надо было сделать ещё одну перегрузку в классе Variable.
C++
1
2
3
4
5
    // ...
    Value operator = (const Variable& val);
 
    Value operator = (const Value& val);
     // ...
0
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
17.07.2009, 15:35
Цитата Сообщение от #pragma Посмотреть сообщение
просто возвращает она значение
operator= должен ссылку возвращать в 99% случаев.
1
Временно недоступен
 Аватар для #pragma
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
17.07.2009, 19:30  [ТС]
А можешь объяснить,почему?
0
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
17.07.2009, 19:46
#pragma, Откомпилируй и запусти два примера,отличающиеся одним символом.
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
#include <stdio.h>
class SomeClass { 
private : 
    int a;
 
public : 
    SomeClass() { 
        a=0;
        printf("Constructor called\n");
    }
    SomeClass(const SomeClass & c) { 
        printf("Copy Constructor called\n");
 
    };    
    SomeClass  &operator=(SomeClass &a ) {
        printf("operator=\n");
        return *this;
    };
    ~SomeClass() { 
        printf("destructor called\n");
    }
 
};
int main() { 
    SomeClass a,b;
    SomeClass c=a;
    printf("a=b=c:\n");
    a=b=c;
};
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
#include <stdio.h>
class SomeClass { 
private : 
    int a;
 
public : 
    SomeClass() { 
        a=0;
        printf("Constructor called\n");
    }
    SomeClass(const SomeClass & c) { 
        printf("Copy Constructor called\n");
 
    };    
    SomeClass  operator=(SomeClass &a ) {
        printf("operator=\n");
        return *this;
    };
    ~SomeClass() { 
        printf("destructor called\n");
    }
 
};
int main() { 
    SomeClass a,b;
    SomeClass c=a;
    printf("a=b=c:\n");
    a=b=c;
};
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.07.2009, 19:46
Помогаю со студенческими работами здесь

Как определить, наложился ли один объект на другой?
не знаю как определить наложился ли один объект на другой. Например есть картинка квадрата и круга я в программе двигаю круг и когда круг...

Как в Android положить один объект (button) на другой (button)?
Скажите, как можно положить один объект на другой, так что бы они оба были кликабельными? У менять есть две кнопки примыкающие друг к...

Как перемещать по слоям как в Photoshop? Чтобы один 2D объект перекрывал другой?
Здравствуйте друзья подскажите как перемещать объекты как в фотошопе? Что-бы один 2d объект перекрывал другой?

Кто может подсказать, при изменении размеров окна браузера разделы на главной странице накладываются один на другой
Кто может подсказать, при изменении размеров окна браузера разделы на главной странице накладываются один на другой Добавлено через 7...

Дополнить объект из другого объекта (как лучше сделать?)
Доброго времени суток! Есть два объекта - ответы и вопросы public class Answer { public int AnswerID { get; set; } ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru