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

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

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

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

01.08.2010, 20:19. Просмотров 826. Ответов 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 // реально сдох

но когда умер первый?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2010, 20:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ООП - вопрос про деструктор (C++):

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

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

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

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

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

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

7
CyBOSSeR
Эксперт С++
2303 / 1673 / 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 просто вызывается конструктор копирования, никакого третьего объекта не создается.
1
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
01.08.2010, 20:53  [ТС] #3
что значит строка 6?
странный очень но коректный с точки зрения компилятора синтаксис...

по поводу стиля - ок, учту.
0
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
01.08.2010, 20:55 #4
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
В строке 20 просто вызывается конструктор копирования
Уважаемый коллега хотел сказать, что вызывается неявно созданный оператор присваивания.
1
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
01.08.2010, 20:58 #5
Цитата Сообщение от Krist_ALL Посмотреть сообщение
что значит строка 6?
странный очень но коректный с точки зрения компилятора синтаксис...
Это назвается списком инициализации. Поле n инициализируется значением переданным в качестве аргумента конструктора.
Цитата Сообщение от Nick Alte Посмотреть сообщение
Уважаемый коллега хотел сказать, что вызывается неявно созданный оператор присваивания.
Да, именно так. Оговорился, спасибо.
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
01.08.2010, 20:59 #6
Цитата Сообщение от Krist_ALL Посмотреть сообщение
что значит строка 6?
странный очень но коректный с точки зрения компилятора синтаксис...
Ничего странного - это список инициализации переменных-членов класса, через запятую указываются имена переменных и значения, которыми они инициализируются. В любой нормальной книжке по языку это есть.
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 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
1
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
01.08.2010, 21:14  [ТС] #8
Спасибо всем за ответы! буду чиать про список инициализаций.
у праты что-то про это нет...
0
01.08.2010, 21:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2010, 21:14
Привет! Вот еще темы с ответами:

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

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

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

Про деструктор и утечку памяти - C++
Доброе время суток. Вот что дано: #include &lt;string&gt; #include &lt;vector&gt; class Symbols { protected: void add(std::string...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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