class A {
public :
virtual void Create() { }
};
class B : public A {
public :
virtual void Create() { }
};
A *a = new B;
a->Create();
class A {
public :
virtual void Create() { }
};
class B : public A {
public :
virtual void Create() { }
};
A *a = new B;
a->Create();
class A { public : virtual void Create();};class B : public A{ public : void Create();};class C : public B{ public : void Create();};
A *a = new C;A->Create(); // B::Create is called here, because B::Create isn't virtual and threrefore C::Create do not 'inherit' from it
Quote:Original post by tomek_zielinski
It won't giv you compile-time error but :
A *a = new C;
A->Create(); // B::Create is called here, because B::Create isn't virtual and threrefore C::Create do not 'inherit' from it
class Base {public: virtual void blah() { cout << "Base" << endl; }};class Child {public: void blah() { cout << "Child" << endl; }};class Grandchild { public: void blah() { cout << "Grandchild" << endl; }};
virtual void Create () = 0;
Quote:Original post by Auron
Plus if you make a function pure virtual, by typing:virtual void Create () = 0;
you've made the class into an interface and so it will give errors if you try to instantiate that class. But any classes derived from it containing no pure virtual functions can be instantiated. This also means that you have to supply an implementation of any pure virtual functions from its base class, even if your implementation is a no-op.
-Auron
Quote:
Quote:
Quote:Original post by tomek_zielinski
It won't giv you compile-time error but :
A *a = new C;
A->Create(); // B::Create is called here, because B::Create isn't virtual and threrefore C::Create do not 'inherit' from it
Wrong.
class Base {
public:
virtual void blah() { cout << "Base" << endl; }
};
class Child {
public:
void blah() { cout << "Child" << endl; }
};
class Grandchild {
public:
void blah() { cout << "Grandchild" << endl; }
};
Try it:
Base* b = new Grandchild();
b->blah();
It should output "Grandchild".
Regards,
Jeff