[omniORB] Interface inheritance or Code inheritance?
Michael Mountrakis
m.mountrakis@neurosoft.gr
Wed Sep 4 13:23:01 2002
Hallo all
I am quite new at omniORB and currently I use
omniORB_304_x86_linux_2.0_glibc2.
The problem I have is that I want one class to inherit methods from its
parent, without having to re write the method implementation for the derived
class. Is it possible with omniORB ? For that reason, I wrote the classic
idl:
test.idl
--------
interface Base{
double op1();
};
interface Derived : Base{
double op2();
};
I've compile it using the example code generation flag:
$ omniidl -bcxx -Wbexample -Wbuse_quotes test.idl
The omniidl generated the following test_i.cc :
class Base_i: public POA_Base,
public PortableServer::RefCountServantBase {
private:
// Make sure all instances are built on the heap by making the
// destructor non-public
//virtual ~Base_i();
public:
// standard constructor
Base_i();
virtual ~Base_i();
// methods corresponding to defined IDL attributes and operations
CORBA::Double op1();
};
//
// Example implementational code for IDL interface Base
//
Base_i::Base_i(){
// add extra constructor code here
}
Base_i::~Base_i(){
// add extra destructor code here
}
// Methods corresponding to IDL attributes and operations
CORBA::Double Base_i::op1(){
// MY CODE FOR op1() HERE
return 1000;
}
// End of example implementational code
//
// Example class implementing IDL interface Derived
//
class Derived_i: public POA_Derived,
public PortableServer::RefCountServantBase {
private:
// Make sure all instances are built on the heap by making the
// destructor non-public
//virtual ~Derived_i();
public:
// standard constructor
Derived_i();
virtual ~Derived_i();
// methods corresponding to defined IDL attributes and operations
CORBA::Double op2();
CORBA::Double op1(); <------SHADOWS PARENT'S INHERITED METHOD
};
//
// Example implementational code for IDL interface Derived
//
Derived_i::Derived_i(){
// add extra constructor code here
}
Derived_i::~Derived_i(){
// add extra destructor code here
}
// Methods corresponding to IDL attributes and operations
CORBA::Double Derived_i::op2(){
// MY CODE HERE
return 2000;
}
CORBA::Double Derived_i::op1(){
// DO I HAVE TO REWRITE THE METHOD AGAIN ?
}
I also tryed out the following class Derived_i definition:
class Derived_i: public POA_Derived,public Base_i,
public PortableServer::RefCountServantBase {
..............
};
But it did not compiled. Can you please suggest anything ?
Mike Mountrakis
Neurosoft Technologies
Athens Greece
www.neurosoft.gr
mike@neurosoft.gr