C++ 如何从基类调用子函数?
我对这项计划有一个问题:C++ 如何从基类调用子函数?,c++,C++,我对这项计划有一个问题: class computer_mouse { left_click() { }; track_wheel() { }; right_click() { }; } class game_mouse: public computer_mouse { double_shot() { }; throw_grenade() { }; sit_down() { }; } class design_mouse: public com
class computer_mouse
{
left_click() { };
track_wheel() { };
right_click() { };
}
class game_mouse: public computer_mouse
{
double_shot() { };
throw_grenade() { };
sit_down() { };
}
class design_mouse: public computer_mouse
{
increase_zoom() { };
decrease_zoom() { };
}
class computer
{
computer_mouse *my_mouse;
}
我想这样做:
computer_mouse *my_mouse = new game_mouse();
my_mouse->double_shot();
如何从基类调用子函数?您必须使用,例如:
computer_mouse *my_mouse = new game_mouse();
static_cast<game_mouse*>(my_mouse)->double_shot();
电脑鼠标*我的鼠标=新游戏鼠标();
静态施法(我的鼠标)->双镜头();
从上面链接的维基百科页面:
静态_cast运算符可用于以下操作:
- 将基类的指针转换为派生类的指针
computer_mouse *my_mouse = new game_mouse();
static_cast<game_mouse*>(my_mouse)->double_shot();
电脑鼠标*我的鼠标=新游戏鼠标();
静态施法(我的鼠标)->双镜头();
从上面链接的维基百科页面:
静态_cast运算符可用于以下操作:
- 将基类的指针转换为派生类的指针
通过使用
static\u cast
:
static_cast<game_mouse*>(my_mouse)->double_shot();
通过使用
static\u cast
:
static_cast<game_mouse*>(my_mouse)->double_shot();
不要这样做:
computer_mouse *my_mouse = new game_mouse();
my_mouse->double_shot();
这样做:
game_mouse *my_mouse = new game_mouse();
my_mouse->double_shot();
不要这样做:
computer_mouse *my_mouse = new game_mouse();
my_mouse->double_shot();
这样做:
game_mouse *my_mouse = new game_mouse();
my_mouse->double_shot();
理解您为什么要这样做可以让人们用最好的方法来响应。您的类方法没有返回类型吗?你真的在C++编程吗?理解为什么你要这样做会让人们用最好的方法来做这个反应。你的类方法没有返回类型吗?你真的在C++编程吗?@ JoaHixiBrg,你有什么理由宁愿STATICEQUICE CAST到DyrimCype?在这种情况下,dynamic_cast“更安全”(虽然有点臭),对吗?您获得了RTTI的优势,如果无法执行强制转换,它将返回一个空指针。@Josh Petitt Yes
dynamic_cast
使用RTTI,但请记住,R代表运行时,这意味着编译器添加的代码并不总是需要的。由于dynamic_cast
可以返回nullptr
,因此您也必须为该检查添加额外的代码。此外,编译器将尝试确保在使用static\u cast
时强制转换是正常的,因此在这种情况下,最好使用static\u cast
@JoachimPileborg,我实现了R部分。我想在这种情况下,我不得不求助于“信息不足”:-)我个人更喜欢“安全”而不是“性能”,但两者都可以。@JoachimPileBorg,你有什么理由更喜欢静态演员而不是动态演员?在这种情况下,dynamic_cast“更安全”(虽然有点臭),对吗?您获得了RTTI的优势,如果无法执行强制转换,它将返回一个空指针。@Josh Petitt Yesdynamic_cast
使用RTTI,但请记住,R代表运行时,这意味着编译器添加的代码并不总是需要的。由于dynamic_cast
可以返回nullptr
,因此您也必须为该检查添加额外的代码。此外,编译器将尝试确保在使用static\u cast
时强制转换是正常的,因此在这种情况下,最好使用static\u cast
@JoachimPileborg,我实现了R部分。我想在这种情况下,我不得不求助于“信息不足”:-)我个人更喜欢“安全”而不是“性能”,但两者都可以。