草庐IT

Overriding

全部标签

c++ - 为什么虚函数是私有(private)的?

我刚刚在一些代码中发现了这一点:classFoo{[...]private:virtualvoidBar()=0;[...]}这有什么目的吗?(我正在尝试将一些代码从VS移植到G++,这引起了我的注意) 最佳答案 见thisHerbSutterarticle至于你为什么要做这样的事情。 关于c++-为什么虚函数是私有(private)的?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questio

c++ - 为什么虚函数是私有(private)的?

我刚刚在一些代码中发现了这一点:classFoo{[...]private:virtualvoidBar()=0;[...]}这有什么目的吗?(我正在尝试将一些代码从VS移植到G++,这引起了我的注意) 最佳答案 见thisHerbSutterarticle至于你为什么要做这样的事情。 关于c++-为什么虚函数是私有(private)的?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questio

c++ - 虚拟显式转换运算符覆盖

我有一个类Base定义了一个explicitoperatorbool:structBase{virtualexplicitoperatorbool()const{returntrue;}};我有一个子类Derived,定义了一个operatorbool:structDerived:Base{operatorbool()constoverride{returnfalse;}};如您所见,Derived::operatorbool没有明确标记为explicit,而是标记为override,所以我希望编译器能够投诉。但是,gcc和clang似乎都同意这是有效的。我的期望不合理吗?此外,如果我

c++ - 虚拟显式转换运算符覆盖

我有一个类Base定义了一个explicitoperatorbool:structBase{virtualexplicitoperatorbool()const{returntrue;}};我有一个子类Derived,定义了一个operatorbool:structDerived:Base{operatorbool()constoverride{returnfalse;}};如您所见,Derived::operatorbool没有明确标记为explicit,而是标记为override,所以我希望编译器能够投诉。但是,gcc和clang似乎都同意这是有效的。我的期望不合理吗?此外,如果我

c++ - 覆盖非虚函数

它所说的C++11FDISIfavirtualfunctionismarkedwiththevirt-specifieroverrideanddoesnotoverrideamemberfunctionofabaseclass,theprogramisill-formed.[Example:structB{virtualvoidf(int);};structD:B{voidf(long)override;//error:wrongsignatureoverridingB::fvoidf(int)override;//OK};如果B::f不会被标记为虚拟怎么办?那么程序是非良构的吗?或者

c++ - 覆盖非虚函数

它所说的C++11FDISIfavirtualfunctionismarkedwiththevirt-specifieroverrideanddoesnotoverrideamemberfunctionofabaseclass,theprogramisill-formed.[Example:structB{virtualvoidf(int);};structD:B{voidf(long)override;//error:wrongsignatureoverridingB::fvoidf(int)override;//OK};如果B::f不会被标记为虚拟怎么办?那么程序是非良构的吗?或者

c++ - 要求虚函数覆盖使用 override 关键字

C++11添加了override以确保您编写的打算覆盖基类虚函数的成员函数实际执行(或不会编译)。但在大型对象层次结构中,有时您可能会意外地编写一个覆盖基类虚拟的成员函数,而您并不打算这样做!例如:structA{virtualvoidfoo(){}//becauseobviouslyeveryclasshasfoo().};structB:A{...};classC:B{private:voidfoo(){//wasintendedtobeaprivatefunctionlocaltoC//notintendedtooverrideA::foo(),butnowdoes}};是否有一

c++ - 要求虚函数覆盖使用 override 关键字

C++11添加了override以确保您编写的打算覆盖基类虚函数的成员函数实际执行(或不会编译)。但在大型对象层次结构中,有时您可能会意外地编写一个覆盖基类虚拟的成员函数,而您并不打算这样做!例如:structA{virtualvoidfoo(){}//becauseobviouslyeveryclasshasfoo().};structB:A{...};classC:B{private:voidfoo(){//wasintendedtobeaprivatefunctionlocaltoC//notintendedtooverrideA::foo(),butnowdoes}};是否有一

c++ - 覆盖与虚拟

在函数前面使用保留字virtual的目的是什么?如果我希望子类覆盖父函数,我只需声明相同的函数,例如voiddraw(){}。classParent{public:voidsay(){std::coutsay();return0;}输出为2。那么,为什么say()的头部需要保留字virtual?非常感谢。 最佳答案 如果函数是虚拟的,那么你可以这样做并且仍然得到输出“2”:Parent*a=newChild();a->say();这是因为virtual函数使用actual类型,而非虚拟函数使用declared类型。阅读polymor

c++ - 覆盖与虚拟

在函数前面使用保留字virtual的目的是什么?如果我希望子类覆盖父函数,我只需声明相同的函数,例如voiddraw(){}。classParent{public:voidsay(){std::coutsay();return0;}输出为2。那么,为什么say()的头部需要保留字virtual?非常感谢。 最佳答案 如果函数是虚拟的,那么你可以这样做并且仍然得到输出“2”:Parent*a=newChild();a->say();这是因为virtual函数使用actual类型,而非虚拟函数使用declared类型。阅读polymor