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

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

Войти
Регистрация
Восстановить пароль
 
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
#1

ООП - вопрос про деструктор - C++

01.08.2010, 20:19. Просмотров 811. Ответов 7
Метки нет (Все метки)

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
#include <iostream>
 
class oop {
int a;
char * name;
 
public: 
        oop(char *,int);
        ~oop();
        void show();
};
 
 
oop::oop(char* text,int p) 
{
std::cout <<text<<std::endl;
a = p;
name = text;
}
 
 
oop::~oop() 
{
    std::cout <<"DESTRUCT "<<name<<std::endl;
}
 
 
void oop::show() 
{
    std::cout <<"a -"<<a<<std::endl;
}
int main() {
 
 
 
oop slava("konstruct slava",100);
slava.show();
std::cout <<123<<std::endl;
slava = oop("konstruct 2",200);
slava.show();
std::cout <<999<<std::endl;
 
 
}

выводит на экран
--------------------------------
konstruct slava
a -100
123
konstruct 2 //slava = oop("konstruct 2",200);
// Вызываем конструктор с новым параметром
DESTRUCT konstruct 2 // временный экземпляр сдох?
a - 200
999
DESRUCT konstruct 2 // реально сдох

но когда умер первый?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2010, 20:19     ООП - вопрос про деструктор
Посмотрите здесь:

Вопрос новичка про виртуальный деструктор - C++
Если инициализировать указатель родительского класса адресом объекта дочернего класса и объявить в родительском классе деструктор...

ООП. Не работает задача (конструктор, деструктор) - C++
Ребят, есть задача, она решенная, но я не могу разобраться в работе конструктора и деструктора, поэтому файлы, приложенные к условию не...

Вопрос по ООП - C++
Вот код class time { private: int hours; int minutes; public: int sum_time(time object, days day); ...

Вопрос по ООП - C++
Стоит ли реализовывать программу через классы, если в главной ф-ции предполагается создание только одного объекта? Вобщем решил...

вопрос по ооп - C++
вот фаил с описанием класса. что такое #ifndef _STOCK1_H_ #define _STOCK1_H_ и #endif в 1,2 и последних строках соответсвенно. ...

ООП ВОПРОС - C++
Плиз обьясните почему нельзя сделать так (ошибка): #include&lt;iostream&gt; using namespace std; class one { public: int a; } ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
01.08.2010, 20:46     ООП - вопрос про деструктор #2
Цитата Сообщение от Krist_ALL Посмотреть сообщение
но когда умер первый?

Не по теме:

Krist_ALL, ты уже не первый день занимаешься программированием, пора работать над оформлением кода - читать невозможно.


После убирания лишнего мусора и переименования, получаем:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
class Sample {
public:
  Sample(int n)
  : n(n) { 
    std::cout << "Construction" << n << std::endl;
  }
 
  ~Sample() { 
    std::cout << "Destruction" << n << std::endl; 
  }
 
private:
  int n;
};
 
int main() {
  Sample s(0);
  s = Sample(1);
 
  return 0;
}
Теперь прекрасно видно, что объектов создается всего два (s и временный) и два же уничтожается (сначала временный, затем s). В строке 20 просто вызывается конструктор копирования, никакого третьего объекта не создается.
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
01.08.2010, 20:53  [ТС]     ООП - вопрос про деструктор #3
что значит строка 6?
странный очень но коректный с точки зрения компилятора синтаксис...

по поводу стиля - ок, учту.
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,927
Завершенные тесты: 1
01.08.2010, 20:55     ООП - вопрос про деструктор #4
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
В строке 20 просто вызывается конструктор копирования
Уважаемый коллега хотел сказать, что вызывается неявно созданный оператор присваивания.
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
01.08.2010, 20:58     ООП - вопрос про деструктор #5
Цитата Сообщение от Krist_ALL Посмотреть сообщение
что значит строка 6?
странный очень но коректный с точки зрения компилятора синтаксис...
Это назвается списком инициализации. Поле n инициализируется значением переданным в качестве аргумента конструктора.
Цитата Сообщение от Nick Alte Посмотреть сообщение
Уважаемый коллега хотел сказать, что вызывается неявно созданный оператор присваивания.
Да, именно так. Оговорился, спасибо.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,444
01.08.2010, 20:59     ООП - вопрос про деструктор #6
Цитата Сообщение от Krist_ALL Посмотреть сообщение
что значит строка 6?
странный очень но коректный с точки зрения компилятора синтаксис...
Ничего странного - это список инициализации переменных-членов класса, через запятую указываются имена переменных и значения, которыми они инициализируются. В любой нормальной книжке по языку это есть.
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
01.08.2010, 21:01     ООП - вопрос про деструктор #7
Krist_ALL, вот более наглядный пример:
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
#include <iostream>
 
class Sample {
public:
  Sample() { 
    std::cout << "Construction " << count++ << std::endl;
  }
 
  ~Sample() { 
    std::cout << "Destruction " << --count << std::endl; 
  }
 
private:
  static int count;
};
 
int Sample::count = 0;
 
int main() {
  Sample s;
  s = Sample();
 
  return 0;
}
Результат выполнения:

Construction 0 - Создан объект s
Construction 1 - Создан временный объект
Destruction 1 - Временный объект уничтожен
Destruction 0 - Уничтожен объект s
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2010, 21:14     ООП - вопрос про деструктор
Еще ссылки по теме:

Вопрос к знатокам (ООП + ассемблер) - C++
Ниже представлены три тестовых класса. Первый - классическая модель классов в с++ Имеет методы, и данные члены. Обрабатывает свои...

Где могу прочитать про основы ООП? - C++
Где могу прочитать про основы ООП?

Вопрос про табуляцию в C++ - C++
Символ табуляции он одновременно переносит курсор на след.строку и выравнивает строки?

Вопрос про реестр - C++
Здравствуйте господа програмисты!У меня есть программа,честно сознаюсь скачал с интернета и переделал не много,поэтому не доконца...


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

Или воспользуйтесь поиском по форуму:
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
01.08.2010, 21:14  [ТС]     ООП - вопрос про деструктор #8
Спасибо всем за ответы! буду чиать про список инициализаций.
у праты что-то про это нет...
Yandex
Объявления
01.08.2010, 21:14     ООП - вопрос про деструктор
Ответ Создать тему
Опции темы

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