LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (http://www.linuxquestions.org/questions/programming-9/)
-   -   c++: virtual methods fail compilation if..... (http://www.linuxquestions.org/questions/programming-9/c-virtual-methods-fail-compilation-if-418463/)

eantoranz 02-22-2006 02:24 PM

c++: virtual methods fail compilation if.....
 
I want to create what in java is called an abstract class. It's a class that's not supposed to be instanced directly but has to be extended by other classes. This class has a number of methods that have to be overriden by its subclasses.

I have a virtual method in that class that returns a value of a certain type... say int. What can I do to stop the compiler from complaining if I don't return anything in that method because I don't return any value? It's going to be overriden by the subclasses, anyway! Maybe there's a way to make a method really "abstract" (C++wise) instead of just saying it's virtual and then I would force myself to do the coding in the subclass (like abstract methods do in java).

dmail 02-22-2006 02:43 PM

Quote:

Originally Posted by eantoranz
Maybe there's a way to make a method really "abstract" (C++wise) instead of just saying it's virtual and then I would force myself to do the coding in the subclass (like abstract methods do in java).

What your are looking for is a pure virtual function, this is what makes an abstract class and its defined like so:
Code:

class a
{
virtual foo() = 0;//pure virtual
};


paulsm4 02-22-2006 03:21 PM

Have you considered using a Java "interface" instead:

http://java.sun.com/docs/books/tutor...interface.html

And yeah, you can certainly do "abstract classes" in Java. In C++, as "dmail" pointed out, you define one or more of the functions (virtual functions, of course) as "=0". In Java, on the other hand, you simply apply the "abstract" keyword to the entire class:

http://java.sun.com/docs/books/tutor.../abstract.html

But 90% of the time, "interface" is really what you want. Of the remaining 10%, usually you'll *still* use an "interface", but then define some concrete "helper class" (one that implements your interface), that will provide default functionality, and that your users can subclass.

eantoranz 02-22-2006 07:01 PM

Yeah, I know about the abstract classes. Once you say one method is abstract in a java class, the class has to be abstract.... but I'm working on c++ right now, not java.... and I know about interfaces too (I even worked with EJBs... go figure!!!! :-D).


All times are GMT -5. The time now is 07:54 PM.