Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
#1

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

17.07.2009, 07:45. Просмотров 514. Ответов 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. Почему так происходит? Как можно решить данную проблему? Я понимаю,что всё связано с динамической памятью скорее всего,эта тема немного туманна пока.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2009, 07:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Один объект не может дополнить другой (C++):

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

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

Дан массив из 10 элементов.Перенести в один другой массив четные числа.Затем перенести в еще один другой масси - C++
Дан массив из 10 элементов.Перенести в один другой массив четные числа.Затем перенести в еще один другой массив нечетные числа.Помогите с...

Если елементы массива соседние одинаковы то один из них заменяется на 0 а другой увеличиваетмя на один - C++
#include "stdafx.h" #include<string> #include <cmath> #include <iostream> #include<locale> using namespace std; const int...

Перенести в один другой массив четные числа.Затем перенести в еще один другой массив нечетные числа. - C++
Дан массив из 10 элементов.Перенести в один другой массив четные числа.Затем перенести в еще один другой массив нечетные числа.Помогите с...

Два потока и один объект - C++
Всем привет. Пишу игру с физическим движком box2d и возникла проблема , которая в принципе к box2d относится только косвенно, поэтому не...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
17.07.2009, 08:18 #2
ты написал перегрузку присваивания для класса 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. если я, конечно, правильно понял, что ты хотел сделать...
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
17.07.2009, 15:30  [ТС] #3
Нет,перегрузка у меня как раз в классе 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);
     // ...
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
17.07.2009, 15:35 #4
Цитата Сообщение от #pragma Посмотреть сообщение
просто возвращает она значение
operator= должен ссылку возвращать в 99% случаев.
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
17.07.2009, 19:30  [ТС] #5
А можешь объяснить,почему?
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
17.07.2009, 19:46 #6
#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;
};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2009, 19:46
Привет! Вот еще темы с ответами:

Может ли функция иметь аргументом другую функцию или объект? - C++
Внимание тупой вопрос )) А может ли функция иметь аргументом другую функцию или объект?

Как использовать один и тот же объект в разных классах? - C++
Подскажите, пожалуйста, как получить доступ к функции через объект. Второй день бьюсь, хотя решение должно быть простое В классе A...

не удается передать объект из одного класса в другой посредством return - C++
есть класс Reading,в котором находится два объекта типа string :text и line,их я передаю с помощью двух аналогичных методов std::string...

Один и тот же объект в одном выражении модифицируется несколько раз - неопределенное поведение - C++
Уважаемые форумчане! Недавно столкнулся с интересным на мой взгляд необычным поведением компилятора c++ от keil. Определил класс шаблон...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.07.2009, 19:46
Ответ Создать тему
Опции темы

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