Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что означает virtual void func() = 0; вопрос по синтаксису С++ 
:(
    Опции темы
saint
Дата 27.11.2005, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 2.9.2005

Репутация: нет
Всего: нет



Подскажите плз что означает данная конструкция:

Код

class MyClass
{
    public:
        
        virtual void func() = 0;
}


Меня интересует часть " = 0". В каком разделе описания языка искать ответ на данный вопрос.

Это сообщение отредактировал(а) saint - 27.11.2005, 18:15
PM MAIL   Вверх
Aleksandor
Дата 27.11.2005, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 22.11.2005
Где: россия, зеленогра д

Репутация: 0
Всего: 12



Виртуальная функция, то есть неопределенная в данном классе.


--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
DeadSoul
Дата 27.11.2005, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



saint,
1. данная функция является виртуальной
2. данная функция не имеет реализации в данном классе, т.е. она обязаны быть переопределена в производных классах


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
LPBOY
Дата 27.11.2005, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: 20
Всего: 20



Это чисто виртуальная функция. Класс в котором объявлена чисто виртуальная функция является абстрактным, т.е. экземпляры этого класса создавать нельзя (указатели и ссылки, можно). Чисто виртуальные функции могут не иметь определения и виртуально вызывать их нельзя. Чисто виртуальные функции наследуются, поэтому в производном классе ее нужно переопределить, иначе она останется чисто виртуальной, и производный класс тоже станет абстрактным.
Классы с чисто виртуальными функциями используются, в основном, в качестве интерфейсов (т.е. содержат только функции), для того чтобы наследовать от них другие классы.
Дополнительно смотри Google или Страуструпа smile

Цитата(Aleksandor @ 27.11.2005, 18:17)
Виртуальная функция, то есть неопределенная в данном классе.


Цитата(DeadSoul @ 27.11.2005, 18:32)
2. данная функция не имеет реализации в данном классе, т.е. она обязаны быть переопределена в производных классах


Виртуальная функция может быть и определенной. Но ее определение должно находится за пределами определения класса и вызывать ее можно только статически.
Код

#include <iostream>

struct A
{
    virtual void f() = 0;
    virtual void g(){}
};

void A::f()
{
    std::cout << "pure virtual function" << std::endl;
}

struct B : A
{
    void f()
    {
        std::cout << "regular virtual function" << std::endl;
    }
    void g()
    {
        A::f();//полностью квалифицированное имя - статический вызов
    }
};

int main()
{
    B b;  
    A *p = &b;
    p->A::f();//вызываем чисто вирт. функцию статически
    p->g();   //вызываем чисто вирт. функцию f() из g()
    p->f();   //вызываем вирт. функцию (переопределенную, не чисто виртуальную)

}


Это сообщение отредактировал(а) LPBOY - 27.11.2005, 18:45
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
BreakPointMAN
Дата 27.11.2005, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 14
Всего: 24



Чисто виртуальная функция это (pure virtual function).
Как правильно сказал DeadSoul - это:
1) виртуальная функция, которая
2) не имеет реализации в данном классе.
Класс, в котором есть чисто виртуальные функции, называется абстрактным классом.
Невозможно создавать объекты абстрактного класса.
Все чисто виртуальные функции должны быть определены в производных классах.
Как правило, абстрактные классы являются базой для других классов, предоставляя интерфейс, с полным отсутствием деталей реализации.


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
LPBOY
Дата 27.11.2005, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: 20
Всего: 20



Цитата(BreakPointMAN @ 27.11.2005, 18:44)
2) не имеет реализации в данном классе.

Может иметь! smile
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
DeadSoul
Дата 27.11.2005, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



Цитата(LPBOY @ 27.11.2005, 18:45)
Цитата (BreakPointMAN @ 27.11.2005, 18:44)
2) не имеет реализации в данном классе.
Может иметь! 

LPBOY, согласен. Но новичку не надо этим забивать голову


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
saint
Дата 27.11.2005, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 2.9.2005

Репутация: нет
Всего: нет



ок. всем огромная благодарность за помощь smile smile smile

Цитата

Но новичку не надо этим забивать голову


Ну эт если новичок в программировании вообще, а если только в С++, то именно этим забивать голову и следует smile smile

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0991 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.