Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从基类调用子函数?_C++ - Fatal编程技术网

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 Yes
dynamic_cast
使用RTTI,但请记住,R代表运行时,这意味着编译器添加的代码并不总是需要的。由于
dynamic_cast
可以返回
nullptr
,因此您也必须为该检查添加额外的代码。此外,编译器将尝试确保在使用
static\u cast
时强制转换是正常的,因此在这种情况下,最好使用
static\u cast
@JoachimPileborg,我实现了R部分。我想在这种情况下,我不得不求助于“信息不足”:-)我个人更喜欢“安全”而不是“性能”,但两者都可以。