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

Виртуальные функции и деструктор - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Пакости С++! Шок! Примеры кода! http://www.cyberforum.ru/cpp-beginners/thread940803.html
было дело написал программу, с ошибкой, но рабочую. Конечно порой странно работала, но всё же более менее. А дело было так:long double *Vx= new long double; // Исходя из граничных условий Vx=Vx=1; for (int i = 1; i < kol_op-2; i++) // ошибка,правильно i <= kol_op-2; {Vx =... } Что имело последствия ввиде Vх=0, до настоящего момента! решил я допилить один компонентик к программе и тут...
C++ Прата С. Задача считать строку до слова done Буду очень признателен за направление в нужно русло (готового ответа не надо, я хочу понять сам, только направление ) *** Условие: Написать программу которая использует массив char и цикл для чтения по одному слову за раз до тех пор пока не будет введено слово done. Затем программа должна сообщить количество введенных слов(исключая done). пример вывода: вводите слова(для завершения... http://www.cyberforum.ru/cpp-beginners/thread940787.html
C++ класс Time
Создайте класс Time(время суток) считая что представлением времени суток является число секунд прошедших от полуночи( классе одной свойство) Напишите конструктор устанавливающий время по часам минутам и секундам. Напишите метод display который должен выводить времяв привычном виде часы минуты секунды. помогите написать программу. Писала, но не уверена в правильности. #include <iostream>...
координаты C++
Создайте класс который принимает координаты (долгота, широта). Создайте наследника этого класса который принимает название города. Осушествите сортировку котрая будет выводить координаты с севера на юг. помогите пожалуйста написать программу. Если можно было бы с объяснением что каждая строка значит. P.S. есть написанная но я не уверена в правильсти #include <iostream> #include...
C++ При введении больше 20 чисел программа выдает странный результат http://www.cyberforum.ru/cpp-beginners/thread940755.html
#include <iostream> #include <locale> using namespace std; double t1, t2; int main() { setlocale(LC_ALL, "RUS");
C++ Ошибка выноса структуры в отдельный файл Доброго времени суток. Имеется такая проблема: у меня часто используется структура координат в разных файлах, потому я ее решил вынести в отдельный файл и подключать. Вынес ее в заголовочный файл Struct.h, но когда программа компилируется, выдаются ошибки в файле "xstddef". Одна из ошибок: "Ошибка 1 error C2784: bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &):... подробнее

Показать сообщение отдельно
19n1ght
2 / 2 / 0
Регистрация: 13.02.2013
Сообщений: 15
20.08.2013, 18:12     Виртуальные функции и деструктор
Доброго времени суток!

Прочел статью на Хабре Виртуальные функции и деструктор. В ней говорится, что в деструкторе ни в коем случае нельзя использовать виртуальные функции (т.к. в деструкторах и конструкторах используется ранее связывание).

Решил проверить. Написал следующий код:

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
#include <iostream>
using namespace std;
 
class A {
public:
    A()
    {
        print("Created A");
    }
    virtual ~A() = 0
    {
        print("Deleted A");
    }
    virtual void print(const char *str) const
    {
        cout << str << endl;
    }
};
 
class B : public A {
public:
    B()
    {
        print ("Created B");
    }
    ~B() 
    {
        print ("Deleted B");
    }
};
 
void main()
{
    A *ptr = new B;
    delete ptr;
}
Все отработало так, как было задумано. На экран было выведено:
Created A
Created B
Deleted B
Deleted A
Вопрос: Можно ли использовать виртуальные функции в конструкторах и деструкторах? На Хабре и в книге Мейрса Effective C++ пишут, что нет. Но на практике все работает. Это было исправлено в последнем стандарте С++11 (статья на Хабре датирована 2010 годом, книга Мейрса, подозреваю, еще раньше) или я где-то ошибся и поэтому работает?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 13:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru