returning pure virtual object


P

Philipp Kraus

Hello,

I have got two pure virtual class like

class Base1 {
public :
virtual Base2 getReturn( void ) const = 0;
}


class Base2 {
public :
virtual void doSomething() = 0;
}


My implementated classes shows


class myReturn : public Base2 { .... }

class myObj : public Base1 {
public :

myObj() : m_data( myReturn() );

Base2 getReturn() { return m_data }

private :
myReturn m_data
}

On g++ I get an error "invalid initialization of reference of type". I would
like to return a reference or copy of the internal object and I need only, that
it is a derivated object from my pure virtual class.

How can I do this in a correct way?

Thanks for the explanation

Phil
 
Ad

Advertisements

V

Victor Bazarov

I have got two pure virtual class like

They are actually called "abstract classes". "Pure" are the member
functions.
class Base1 {
public :
virtual Base2 getReturn( void ) const = 0;

'Base2' seems undefined here.
;

and try to avoid putting "void" between parentheses. You're being
inconsistent (you didn't do that in the 'Base2' in the declaration of
the 'doSomething' member), and it's a C-ism.
class Base2 {
public :
virtual void doSomething() = 0;
} ;


My implementated classes shows


class myReturn : public Base2 { .... }

What's in '...'? Does it actually implement 'doSomething'?
class myObj : public Base1 {
public :

myObj() : m_data( myReturn() );

Actually, "m_data()" should suffice.
Base2 getReturn() { return m_data }

This 'getReturn' does not override the 'Base1::getReturn' -- they have
different types. Perhaps you meant

Base2 getReturn() const { return m_data; }

However, that won't do either. It *slices* the return value and
converts (or, rather, attempts to convert) the object of the derived
type ('myReturn') to the base class, which is *abstract*. IOW, it tries
to *instantiate* an object of an abstract class.
private :
myReturn m_data
;

}
;

What's wrong with your keyboard? You seem to be missing a whole lot of
semicolons...
On g++ I get an error "invalid initialization of reference of type". I
would
like to return a reference or copy of the internal object and I need
only, that
it is a derivated object from my pure virtual class.

You can't return a copy. In order to return a copy the return value of
the function has to be of the derived type. You *can* return a
reference to the base class, but you will need to change the declaration
of your 'getReturn' member to something like

const Base2& getReturn() const;
How can I do this in a correct way?

"Correct" depends on the requirements. What are you trying to accomplish?

V
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top