Ce este o clasa abstracta?
Raspuns
O clasa abstracta reprezinta un concept general care necesita variante concrete pentru a putea fi utilizat.
De exemplu, animal reprezinta un concept general iar variantele lui concrete por fi caine, pisica s.a.m.d.
In C++, o clasa este abstracta daca
- are cel putin o functie virtuala pura;
Exemplu [1]Code: Select all
class Animal { public: // contains at least one pure virtual function // (a function which has pure virtual specifier '=0'). virtual void say_something() = 0; virtual void do_somethnig() = 0; // 'Animal' is an abstract class. };
- mosteneste cel putin o functie la care ultima suprascriere este virtuala pura.
Exemplu [2]Exemplu [3]Code: Select all
class Mammal : public Animal { public: // (1) does not override 'say_something' pure virtual function; // (2) overrides 'do_somethnig' having pure virtual specifier ' = 0'. virtual void do_somethnig() = 0; // given (1) or (2), 'Mammal' class is still abstract };
Code: Select all
class Dog : public Mammal { public: // Finally, 'Dog' is not an abstract class virtual void say_something() { std::cout << "Bark, bark!"; } virtual void do_somethnig() { std::cout << "Bite you!"; } };
O clasa abstracta nu poate fi instantiata
Exemplu [4]
Code: Select all
int main()
{
Animal a; // Error: cannot instantiate abstract class
Mammal* pM = new Mammal; // Error: cannot instantiate abstract class
Dog rex; // OK, 'Dog' is not an abstract class
// ...
}
Exemplu [5]
Code: Select all
void f1(Animal a); // Error: cannot instantiate abstract class
Animal f2(); // Error: cannot instantiate abstract class
Dog f3(); // OK, Dog is not an abstract class
int main()
{
Animal* p = &(Animal)f3(); // Error: cannot instantiate abstract class
// ...
}
Exemplu [6]
Code: Select all
void f4(Animal& rA); // OK
void f5(Animal* pA); // OK
Animal& f6(); // OK
Animal* f7(); // OK
int main()
{
Animal* p = (Animal*)&f3(); // OK
Animal& r = (Animal&)f3(); // OK
// ...
}
- ISO/IEC 14882:2003 - 10.4 Abstract classes
- [MSDN]Abstract Classes (C++)
<< Back to C++ Index