Sir,
I have a query about this vitual function. Look at this example:-
using namespace std;
#include <iostream>
class Animal {
public:
void eat() { //I have removed the virtual keyword here.
cout << "I eat like a generic animal.\n";
}
// polymorphic deletes require a virtual base destructor
//virtual ~Animal() {
//}
};
class Wolf : public Animal {
public:
void eat() {
cout << "I eat like a wolf!\n";
}
};
class Fish : public Animal {
public:
void eat() {
cout << "I eat like a fish!\n";
}
};
class GoldFish : public Fish {
public:
void eat() {
cout << "I eat like a goldfish!\n";
}
};
int main() {
Animal animal;
Wolf wolf;
Fish fish;
GoldFish goldfish;
animal.eat();
wolf.eat();
fish.eat();
goldfish.eat();
return 0;
}
using namespace std;
#include <iostream>
class Animal {
public:
void eat() { //I have removed the virtual keyword here.
cout << "I eat like a generic animal.\n";
}
// polymorphic deletes require a virtual base destructor
//virtual ~Animal() {
//}
};
class Wolf : public Animal {
public:
void eat() {
cout << "I eat like a wolf!\n";
}
};
class Fish : public Animal {
public:
void eat() {
cout << "I eat like a fish!\n";
}
};
class GoldFish : public Fish {
public:
void eat() {
cout << "I eat like a goldfish!\n";
}
};
int main() {
Animal animal;
Wolf wolf;
Fish fish;
GoldFish goldfish;
animal.eat();
wolf.eat();
fish.eat();
goldfish.eat();
return 0;
}
To copy to clipboard, switch view to plain text mode
The output is :-
I eat like a generic animal.
I eat like a wolf!
I eat like a fish!
I eat like a goldfish!
Instead of this:-
I eat like a generic animal.
I eat like a generic animal.
I eat like a generic animal.
I eat like a generic animal.
Why is this happening? Is there something wrong? If it is possible then what is the use of this virtual function. Please answer me.
Thank You.
Bookmarks