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

Неверно отображатся содержимое копии - C++

Восстановить пароль Регистрация
 
Кротяка
 Аватар для Кротяка
5 / 5 / 0
Регистрация: 20.12.2010
Сообщений: 370
31.10.2013, 23:30     Неверно отображатся содержимое копии #1
Есть код:
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
class Country{
public:
    double Area;
    char Name[25];
 
    Country();
    Country(Country &Country);
    Country(char Name[25], double Area);
    ~Country();
    void show();
};
Country::Country(){}
 
Country::Country(char Name[25], double Area){
    strcpy_s(Country::Name, Name);
    this->Area=Area;
}
 
Country::Country(Country &Country){}
 
Country::~Country(){}
 
void Country::show(void){
    cout<<"Название: "<<Name<<endl;
    cout<<"Площадь: "<<Area<<endl;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
 
    Country c;
    Country s("Ukraine",534.5);
    Country a(s);
 
    cout<<"Создание экземпляра класса без параметров с последующим заполнением"<<endl;
    cout<<"Введите название страны: ";
    cin>>c.Name;
    cout<<"Введите площадь страны: ";
    cin>>c.Area;
    cout<<endl<<"Информация о стране: "<<endl<<"Название: "<<c.Name<<endl<<"Площадь: "<<c.Area<<endl;
    c.~Country();
 
    cout<<endl<<"Создание экземпляра класса с вызовом конструктора с параметрами"<<endl;
    s.show();
    s.~Country();
 
    cout<<endl<<"Создание копии экземпляра класса"<<endl;
    a.show();
    a.~Country();
 
    system("pause");
    return 0;
}
При попытке копирования объекта получается вот такая хрень:
Миниатюры
Неверно отображатся содержимое копии  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2013, 23:30     Неверно отображатся содержимое копии
Посмотрите здесь:

C++ Компилируется неверно
C++ конструктор копии
Копии C++
Неверно считает C++
Конструктор копии C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кротяка
 Аватар для Кротяка
5 / 5 / 0
Регистрация: 20.12.2010
Сообщений: 370
31.10.2013, 23:30  [ТС]     Неверно отображатся содержимое копии #2
помогите найти ошибку
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,042
31.10.2013, 23:37     Неверно отображатся содержимое копии #3
Цитата Сообщение от Кротяка Посмотреть сообщение
помогите найти ошибку
вот она
Цитата Сообщение от Кротяка Посмотреть сообщение
Country::Country(Country &Country){}
конструктор копирования пустой
Цитата Сообщение от Кротяка Посмотреть сообщение
strcpy_s(Country::Name, Name);
куда копируешь строку?
нужно в экземпляр класса
C++
1
strcpy_s(this->Name, Name);
Добавлено через 1 минуту
Цитата Сообщение от Кротяка Посмотреть сообщение
c.~Country();
зачем явно вызывать деструкторы?
Кротяка
 Аватар для Кротяка
5 / 5 / 0
Регистрация: 20.12.2010
Сообщений: 370
31.10.2013, 23:43  [ТС]     Неверно отображатся содержимое копии #4
ValeryS, спасибо. Можно поинтересоваться, как конкретно это должно выглядеть?
деструкторы вызываю чтобы сразу уничтожить объект и освободить память
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,042
31.10.2013, 23:52     Неверно отображатся содержимое копии #5
Цитата Сообщение от Кротяка Посмотреть сообщение
деструкторы вызываю чтобы сразу уничтожить объект и освободить память
не волнуйся не освободишь
у тебя нет динамического выделения а для статического эти фокусы не пройдут система/ компилятор сама решит когда удалять
в результате у тебя память занята а объекта уже нет
Цитата Сообщение от Кротяка Посмотреть сообщение
Можно поинтересоваться, как конкретно это должно выглядеть?
так же как делал конструктор с параметрами
C++
1
2
3
4
5
Country::Country(const Country &cnt)
{
strcpy_s(this->Name,cnt.Name);
this->Area=cnt.Area;
}
Кротяка
 Аватар для Кротяка
5 / 5 / 0
Регистрация: 20.12.2010
Сообщений: 370
31.10.2013, 23:57  [ТС]     Неверно отображатся содержимое копии #6
ValeryS, сделал вот так
C++
1
2
3
4
Country::Country(Country &Country){
    strcpy_s(this->Name, Country.Name);
    this->Area=Country.Area;
}
спасибо большое
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2013, 00:03     Неверно отображатся содержимое копии
Еще ссылки по теме:

C++ конструктор копии
C++ Конструктор копии
Мелкая и глубокая копии C++

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,042
01.11.2013, 00:03     Неверно отображатся содержимое копии #7
Цитата Сообщение от Кротяка Посмотреть сообщение
сделал вот так
Во первых для конструктора копии используй const, во избежании
во вторых имя аргумента,а равно и переменных, старайся делать чтобы не совпадало с именем класса и членами класса
потом сам запутаешься в этих Country и компилятор можешь запутать, перекрытие имен
можно добавлять в начало a(argument, аргумент) t(temp, временная)
aCountry например
Yandex
Объявления
01.11.2013, 00:03     Неверно отображатся содержимое копии
Ответ Создать тему
Опции темы

Текущее время: 14:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru