[问题] 子类别覆写父类别成员变量

楼主: kaijajan (kj)   2014-09-25 11:05:01
如题
假使父类别有个member variable,在父类别的function中被使用
我继承了一个子类别,想要用一个新的东西去替代父类别中的member variable
不知道是否有办法做到呢
程式码如下:
tool_base是在原先base中被使用的class
我继承了这两个class,想改写一部份的行为 (derived & tool_derived)
不知道是否有办法直接覆写掉呢?
class tool_base
{
public:
tool_base()
{
}
~tool_base()
{
}
void show_name()
{
printf("my name is tool_base\n");
}
};
class tool_derived : public tool_base
{
public:
tool_derived()
{
}
~tool_derived()
{
}
virtual void show_name()
{
printf("my name is tool_derived\n");
}
};
class base
{
public:
base()
{
}
~base()
{
}
void show_tool_name()
{
tool.show_name();
}
tool_base tool;
};
class derived : public base
{
public:
derived()
{
}
~derived()
{
}
tool_derived tool;
};
derived d;
d.show_tool_name(); <
作者: hichcock (快乐一整年 ^^~~~)   2014-09-25 11:24:00
可达成, virtual function 用法错了
楼主: kaijajan (kj)   2014-09-25 11:43:00
请问一下那边弄错了呢?tool_base跟tool_derived的tool是不同的namespace如果继承下来的话d会有两块内存都叫tool(内容不同)如果是呼叫base class的show_tool_name会直接对应到base class的tool_base tool;想知道是否有不override show_tool_name的方式
作者: Feis (永远睡不着 @@)   2014-09-25 16:20:00
你不想 override 任何东西? 那 d 当成 base 后的 tool 要是?
作者: hichcock (快乐一整年 ^^~~~)   2014-09-25 16:42:00
哪些部分能动, 如果都不能动就无解只要 class base 里面的 tool 能改成 pointer, 就简单了

Links booklink

Contact Us: admin [ a t ] ucptt.com