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

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

17.07.2009, 07:45. Показов 962. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru