Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Что означает virtual void func() = 0;


Автор: saint 27.11.2005, 18:14
Подскажите плз что означает данная конструкция:

Код

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


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

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

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

Автор: LPBOY 27.11.2005, 18:42
Это чисто виртуальная функция. Класс в котором объявлена чисто виртуальная функция является абстрактным, т.е. экземпляры этого класса создавать нельзя (указатели и ссылки, можно). Чисто виртуальные функции могут не иметь определения и виртуально вызывать их нельзя. Чисто виртуальные функции наследуются, поэтому в производном классе ее нужно переопределить, иначе она останется чисто виртуальной, и производный класс тоже станет абстрактным.
Классы с чисто виртуальными функциями используются, в основном, в качестве интерфейсов (т.е. содержат только функции), для того чтобы наследовать от них другие классы.
Дополнительно смотри 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();   //вызываем вирт. функцию (переопределенную, не чисто виртуальную)

}

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

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

Может иметь! smile

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

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

Автор: saint 27.11.2005, 20:16
ок. всем огромная благодарность за помощь smile smile smile

Цитата

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


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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)