草庐IT

c++ - 为什么不允许继承成员?

我是C++的初学者,我正在做一个关于抽象类和继承的练习。这是我的抽象类:#ifndefSHAPE_H#defineSHAPE_HclassShape{public:virtualvoidarea();virtualvoidperimeter();virtualvoidvolume();};#endif这是我实现抽象类的具体类:#include#include#include"Shape.h"usingnamespacestd;classCircle:publicShape{public:Circle(int);private:intr;};Circle::Circle(intrad){

c++ - 为什么不允许继承成员?

我是C++的初学者,我正在做一个关于抽象类和继承的练习。这是我的抽象类:#ifndefSHAPE_H#defineSHAPE_HclassShape{public:virtualvoidarea();virtualvoidperimeter();virtualvoidvolume();};#endif这是我实现抽象类的具体类:#include#include#include"Shape.h"usingnamespacestd;classCircle:publicShape{public:Circle(int);private:intr;};Circle::Circle(intrad){

c++ - 如何在 C++ 中实现 "virtual template function"

首先:我已经阅读并且我现在知道在C++中虚拟模板成员函数(还没有?)是不可能的。一种解决方法是将类设为模板,然后在成员函数中也使用模板参数。但是在OOP的上下文中,如果类实际上是一个模板,我发现下面的示例将不是很“自然”。请注意,代码实际上不起作用,但gcc-4.3.4报告:error:templatesmaynotbe'virtual'#include#includeclassAnimal{public:templatevirtualvoideat(AMOUNTamount)const{std::coutvoideat(AMOUNTamount)const{std::coutvoid

c++ - 如何在 C++ 中实现 "virtual template function"

首先:我已经阅读并且我现在知道在C++中虚拟模板成员函数(还没有?)是不可能的。一种解决方法是将类设为模板,然后在成员函数中也使用模板参数。但是在OOP的上下文中,如果类实际上是一个模板,我发现下面的示例将不是很“自然”。请注意,代码实际上不起作用,但gcc-4.3.4报告:error:templatesmaynotbe'virtual'#include#includeclassAnimal{public:templatevirtualvoideat(AMOUNTamount)const{std::coutvoideat(AMOUNTamount)const{std::coutvoid

c++ - 你的析构函数什么时候应该是虚拟的?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whentousevirtualdestructors?什么时候你的C++对象的析构函数应该是virtual? 最佳答案 你需要虚拟析构函数至少一个类方法是虚拟的。这是因为虚方法的原因是你要使用多态性。这意味着您将在基类指针上调用一个方法,并且您想要最派生的实现——这就是多态性的全部意义所在。现在,如果您没有虚拟析构函数,并且通过指向基类的指针调用析构函数,您最终会调用基类析构函数。在这种情况下,您希望多态性也适用于您的析构函数,例如通过在您的基类上调用析

c++ - 你的析构函数什么时候应该是虚拟的?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whentousevirtualdestructors?什么时候你的C++对象的析构函数应该是virtual? 最佳答案 你需要虚拟析构函数至少一个类方法是虚拟的。这是因为虚方法的原因是你要使用多态性。这意味着您将在基类指针上调用一个方法,并且您想要最派生的实现——这就是多态性的全部意义所在。现在,如果您没有虚拟析构函数,并且通过指向基类的指针调用析构函数,您最终会调用基类析构函数。在这种情况下,您希望多态性也适用于您的析构函数,例如通过在您的基类上调用析

c++ - 在 C++ 编译期间出现 'has virtual method ... but non-virtual destructor' 警告是什么意思?

#includeusingnamespacestd;classCPolygon{protected:intwidth,height;public:virtualintarea(){return(0);}};classCRectangle:publicCPolygon{public:intarea(){return(width*height);}};有编译警告Class'[C@1a9e0f7'hasvirtualmethod'area'butnon-virtualdestructor如何理解这个警告以及如何改进代码?[EDIT]这个版本现在正确吗?(试图给出答案以阐明自己的概念)#inc

c++ - 在 C++ 编译期间出现 'has virtual method ... but non-virtual destructor' 警告是什么意思?

#includeusingnamespacestd;classCPolygon{protected:intwidth,height;public:virtualintarea(){return(0);}};classCRectangle:publicCPolygon{public:intarea(){return(width*height);}};有编译警告Class'[C@1a9e0f7'hasvirtualmethod'area'butnon-virtualdestructor如何理解这个警告以及如何改进代码?[EDIT]这个版本现在正确吗?(试图给出答案以阐明自己的概念)#inc

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}};是否有一