Hi,
I have some legacy code looks like this:
class Tool
{
public:
Tool(char* name);
virtual void do();
};
class Work
{
private:
Tool _tool;
public:
Work();
void run();
}
The Work.cc is defined as:
Work::Work()
:
_tool("Old Tool")
{
....
}
void Work::run(){
....
_tool.do();
....
}
And some other code is using class Work.
Now I have a NewTool class:
class NewTool : public Tool
{
public:
NewTool(char* name);
virtual void do()
{
my new do...
}
}
I would like to use my NewTool in Work. But some old code is not
compatible with NewTool. So I have to keep Work class as it is and I
deceided to define a NewWork class derived from Work. All I want is to
give "_tool" a NewTool object. I want to keep code change as minimum
as possible and prefer not to change Tool or Work. But if I have to
change them, it is OK too.
class NewWork : public Work
{
public:
NewWork();
}
I am wondering how I can write the constructor of NewWork so that is
has all function from Work but uses NewTool. The following code does
not work:
NewWork::NewWork
:
_tool(NewTool("New Tool"))
{
}
Can anyone help?
Thanks,
qq