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

Проблема с виртуальными функциями - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Задача по С++ Использование Стандартной Библиотеки Шаблонов. http://www.cyberforum.ru/cpp-beginners/thread9639.html
Уважаемые программисты, помогите пожалуйста с решением такой вот задачи по С++. С помощью STL Тип контейнера - Дек Задача для первого контейнера - Среднее арифметическое Условие выбора элементов -Некратные 3 Задача для второго контейнера - Максимум
C++ Люди помогите с Tree View Control Добрый день! Помогите пожалуйста с элементом просмотра дерева (Microsoft Visual C++ 6) Проблема-создаю приложение (на API). Главное окно-немодальный диалог. В него внедряю List View. (Все идет через ресурсы). Далее создаю иконки(битмапы). Пытаюсь внедрить их в дерево. Они не внедряются. ImageList_AddIcon возвращает -1. Все строки внедряются нормально, место под иконки(битмапы) слева от строк... http://www.cyberforum.ru/cpp-beginners/thread9618.html
C++ Помогите пожалуйста с созданием конвертером
Требуется создать программу-конвертер текстовых файлов из альтернативной кодировки (Dos) в кодовую страницу ОС Windows.
преобразование типов C++
человеки подскажите как написать функцию преобразования типов для своего класса. надо преобразовать из моего класса, типа инт, в строку и обратное преобразование.
C++ Есть задача. Нужно запустить её через командную строку http://www.cyberforum.ru/cpp-beginners/thread9536.html
Люди, подскажите что нужно добавить/вписать в задачке, чтобы при открытии её в командной строке она там же и исполнялась. Если непонятно обьяснил, то : Есть задача. Нужно запустить её через командную строку, и чтобы появилась строка ввода, в которую нужно будет ввести определённый символ чтобы задача выполнилась. После чего задача тут же(в ФАРе) и выполнилась. Плз, Хелп народ.
C++ Написать функцию копирующую строку из исходной области памяти Написать функцию void strCpy(char* dest, char* src), копирующую строку из исходной области памяти, на которую указывает указатель src в область памяти, на которую указывает указатель dest. Функция должна копировать строку (в.т.ч. и терминирующий ноль) полностью. Функциями библиотеки string.h пользоваться запрещено. записал так: void strCpy(char* dest, char* src) { * dest= * src; ... подробнее

Показать сообщение отдельно
Lord_Voodoo
Супер-модератор
8584 / 2184 / 61
Регистрация: 07.03.2007
Сообщений: 10,868
Завершенные тесты: 1
02.07.2008, 16:40     Проблема с виртуальными функциями
нет, как раз таки вызывается родительский деструктор, потому что для наследника не определен деструктор, поэтому и перемещаешься по иерархии вверх... хотя глянул твой код, он все равно по иерархии вверх идет, даже с объявленным конструктором...
в билдеровском хелпе написано, что оно так и должно быть, обращение к деструкторам идет до базового класса...
Код
#include <iostream>
class color {
public:
   virtual ~color() {  // Virtual destructor
      std::cout << "color dtor\n";
      }
};
class red : public color {
public:
   ~red() {  // This destructor is also virtual
      std::cout << "red dtor\n";
      }
};
class brightred : public red {
public:
   ~brightred() {  // This destructor is also virtual
       std::cout << "brightred dtor\n";
       }
};
int main() {
   color *palette[3];
   palette[0] = new red;
   palette[1] = new brightred;
   palette[2] = new color;
   // The destructors for red and color are called.
   delete palette[0];
   std::cout << std::endl;
   // The destructors for bright red, red, and color are called.
   delete palette[1];
   std::cout << std::endl;
   // The destructor for color is called.
   delete palette[2];
   return 0;
}
Program Output:
red dtor
color dtor
brightred dtor
red dtor
color dtor

color dtor
в codeblock та же ситуация:
Код
#include <stdio.h>
class A
{
    private:
    virtual void Destroy()
    {
      puts("A::Destroy() called");
    }
    public:
    virtual void Func()
    {
      VirtFunc();
    }
    ~A()
    {
      Destroy();
    }
    virtual void VirtFunc()
    {
      puts("A::VirtFunc() called");
    }
};
class B : public A
{
  public:
    ~B()
    {
        Destroy();
    }
    virtual void Func()
    {
      puts("B::VirtFunc() called");
    }
    virtual void Destroy()
    {
      puts("B::Destroy() called");
    }
};
class C : public B
{
  public:
    ~C()
    {
        Destroy(0);
    }
    virtual void Func()
    {
      puts("C::VirtFunc() called");
    }
    void Destroy(int i)
    {
      puts("C::Destroy() called");
    }
};
int main()
{
  {
    C BObject;
    BObject.Func();
  }
  getchar();
  return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru