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

С++ Конструктор копий. Функция, работающая с объектами - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Тормозит программа http://www.cyberforum.ru/cpp-beginners/thread806123.html
Добрый вечер. В чем может быть загвоздка? Пишу тетрис (консольный), на работе он летает а дома тормозит. Хочу дописать... Железо почти одинаковое...
C++ Нужна практика Приветствую всех. :) Не ругайтесь сильно, знаю что подобных тем было созданно уйма. Подскажите пожалуйста как мне поступить. Я ещё не учусь в выше, язык изучаю сам дома, сейчас читаю паралельно пару книг, и всё бы хорошо, но в последнее время, я почти не пишу программ (если их так можно назвать :D), вот захожу в раздел " С++ для начинающих", открываю топики, и давай смотреть, то слишком лёгкая,... http://www.cyberforum.ru/cpp-beginners/thread806115.html
Библиотека libtiff на с++ C++
Добрый вечер. У меня следующие проблемы. Искал библиотеку libtiff (tiff.h / tiffio.h) на с++ для работы с файлами данного формата. Но ничего дельного не нашел ни на наших, ни на иностранных ресурсах. Обрывки кода были, но, зачастую, в нем приплетены классы и функции, описания которых нет (и как поймешь, что оно там делает, когда класс с именем, смутно помогающим понять его возможное...
Вылетает программа при обращении к объекту класса C++
итак, есть абстрактный базовый класс "дерево", есть два его наследника: плодовое дерево и лесное дерево. Надо написать класс "Контейнер деревьев" на базе массива программа вылетает с сообщением "17.ехе" прекращает работу, виндоус ищет пути предотвращения проблемы и т.д. head.h #ifndef _TREEE_ #define _TREEE_ #include <iostream> #include <cmath> using namespace std; enum Type {list,...
C++ Класс-контейнер? Что это такое и с чем его «едят»? http://www.cyberforum.ru/cpp-beginners/thread806077.html
Вечер добрый, столкнулся со следующей проблемой, в общем, есть задание: Создать класс-контейнер, который является абстракцией текста и состоит из линейных объектов и методов для добавления строки в тексте, удаление строки из текста, очистить текст, получить длину самой длинной строки. Ну, я как обычно, перед тем как писать код, начал шариться по нету и собирать информацию, теорию и т.д. и...
C++ Перегрузка классов struct Massiv { int n; int *p; Massiv () { p=0; n=0; } Massiv (int *y,int n) подробнее

Показать сообщение отдельно
supra7sky
 Аватар для supra7sky
15 / 15 / 1
Регистрация: 07.02.2013
Сообщений: 123
11.03.2013, 23:51     С++ Конструктор копий. Функция, работающая с объектами
Конструктор копий должен работать в след. ситуациях:
1) В объявлении объекта, когда один объект используется для инициализации другого.
2) Объект передается в ф-ю в качестве параметра
3) В качестве возвр. знач. создается временный объект

У меня проблема либо с конструктором копий, либо с дружественной функцией.
В результате мне вместо заданных мной данных выводится мусор. (Никаких ошибок компилятор не выводит)


Кусок класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class Machine
{
        //...
public:
    Machine  ();
    Machine  (int x);
    Machine  (const Machine &obj); //конструктор копий
    ~Machine ();
    void SET ();
    void GET ();
    friend Machine best (Machine OBJ_1, Machine OBJ_2); //ф-я должна возвращать объект
};
Определение конструктора копий и проблемной ф-ии:
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
Machine:: Machine  (const Machine &obj)
{
    id = new int;
    cost = new float;
    power = new float;
    weight = new float;
    top_speed = new float;
    acceleration = new float;
}
//
Machine best (Machine OBJ_1, Machine OBJ_2) //пункт 2) передается в ф-ю в качестве параметра
{
    int OB_1 = 0, OB_2 = 0;
 
        //простая арифметика (вырезал)
 
    if (OB_1 == OB_2) 
        return *OBJ_1.id < *OBJ_2.id ? OBJ_1 : OBJ_2;  //пункт 3) создается временный объект для возвр.  зн.
    else 
        return OB_1 > OB_2 ? OBJ_1 : OBJ_2;
}
//
int main ()
{
    int size;
    cout << "SIZE: ";   cin >> size;
    Machine *collection = new Machine[size];
 
    for (int i = 0; i < size; i++)
    {
        collection[i].SET(); cout << endl;
    }
    for (int i = 0; i < size; i++)
    {
        collection[i].GET(); cout << endl;
    }
 
    int ID_1, ID_2;
    cout << "How machine you like to compare? " << endl;
    cout << "1st ID: "; cin >> ID_1;
    cout << "2nd ID: "; cin >> ID_2;
 
    cout << endl << "The best machine is: " << endl;
    best ( collection[ID_1], collection[ID_2] ).GET(); //Вызов проблемной ф-ии. На экран выводится мусор
 
    system("pause");
    return 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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <iostream>
using namespace std;
 
class Machine
{
    int   *id;
    float *cost,
          *power,
          *weight,
          *top_speed,
          *acceleration;
public:
    Machine  ();
    Machine  (int x);
    Machine  (const Machine &obj);
    ~Machine ();
    void SET ();
    void GET ();
    friend Machine best (Machine OBJ_1, Machine OBJ_2);
};
Machine:: Machine  ()
{
    id = new int;
    cost = new float;
    power = new float;
    weight = new float;
    top_speed = new float;
    acceleration = new float;
}
Machine:: Machine  (int x)
{
    id = new int(x);
    cost = new float(x);
    power = new float(x);
    weight = new float(x);
    top_speed = new float(x);
    acceleration = new float(x);
}
Machine:: Machine  (const Machine &obj)
{
    id = new int;
    cost = new float;
    power = new float;
    weight = new float;
    top_speed = new float;
    acceleration = new float;
}
Machine:: ~Machine ()
{
    delete id;
    delete cost;
    delete power;
    delete weight;
    delete top_speed;
    delete acceleration;
}
void Machine::SET  ()
{
    cout << "ID: ";             cin >> *id;
    cout << "Cost: ";           cin >> *cost;
    cout << "Power: ";          cin >> *power;
    cout << "Weight: ";         cin >> *weight;
    cout << "Top speed: ";          cin >> *top_speed;
    cout << "Acceleration: ";       cin >> *acceleration;
}
void Machine::GET  ()
{
    cout << "ID: ";             cout << *id       << endl;
    cout << "Cost: ";           cout << *cost         << endl;
    cout << "Power: ";          cout << *power        << endl;
    cout << "Weight: ";         cout << *weight       << endl;
    cout << "Top speed: ";          cout << *top_speed        << endl;
    cout << "Acceleration: ";       cout << *acceleration     << endl;
}
Machine best (Machine OBJ_1, Machine OBJ_2)
{
    int OB_1 = 0, OB_2 = 0;
 
    if  (*OBJ_1.power > *OBJ_2.power)            OB_1++;
    else if (*OBJ_1.power < *OBJ_2.power)            OB_2++;
    if  (*OBJ_1.top_speed > *OBJ_2.top_speed)        OB_1++;
    else if (*OBJ_1.top_speed < *OBJ_2.top_speed)        OB_2++;
    if  (*OBJ_1.acceleration > *OBJ_2.acceleration)      OB_1++;
    else if (*OBJ_1.acceleration < *OBJ_2.acceleration)      OB_2++;
    if  (*OBJ_1.weight < *OBJ_2.weight)          OB_1++;
    else if (*OBJ_1.weight > *OBJ_2.weight)          OB_2++;
 
    if (OB_1 == OB_2) 
        return *OBJ_1.id < *OBJ_2.id ? OBJ_1 : OBJ_2;
    else 
        return OB_1 > OB_2 ? OBJ_1 : OBJ_2;
}
 
int main ()
{
    int size;
    cout << "SIZE: ";   cin >> size;
    Machine *collection = new Machine[size];
 
    for (int i = 0; i < size; i++)
    {
        collection[i].SET(); cout << endl;
    }
    for (int i = 0; i < size; i++)
    {
        collection[i].GET(); cout << endl;
    }
 
    int ID_1, ID_2;
    cout << "How machine you like to compare? " << endl;
    cout << "1st ID: "; cin >> ID_1;
    cout << "2nd ID: "; cin >> ID_2;
 
    cout << endl << "The best machine is: " << endl;
    best ( collection[ID_1], collection[ID_2] ).GET();
 
    system("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 10:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru