Reputation: 2078
I think I don't get something a very basic concept on virtual behavior. I want to create the following hierarchy:
class Parser{
virtual Parsable parse() = 0;
}
class SpecialParser : public Parser{
SpecialParsable parse() override; // implemented
}
Where clearly SpecialParsable
class inherits from Parsable
.
This returns me an error because of the different signature. (SpecialParser::parse() returns SpecialParsable instead of Parsable)
.
Now, Parsable is clearly an abstract class and I don't want to make it possible to be instantiated. I don't understand why shouldn't be possible to do that since SpecialParsable is only a specific implementation of a Parsable.
Thanks in advance,
Upvotes: 1
Views: 192
Reputation: 93324
Dynamic polymorphism in C++ relies on indirection. If you return a pointer (or a reference), your example will compile and behave as expected. This is called a "covariant return type":
class Parser {
virtual Parsable* parse() = 0;
};
class SpecialParser : public Parser {
SpecialParsable* parse() override; // implemented
};
Upvotes: 4