草庐IT

继承权

全部标签

c++ - 为什么我们不能为继承定义一个匿名类?

classMyClass:SomeFeatureGeneratedByTemplateTemplate为我们的类添加功能提供了很多便利,只需继承一个实例化的类模板。但是,有时功能可能变得太复杂而无法通过模板实现,而宏可能是唯一的选择。MACRO_TO_GENERATE_COMPLICATED_FEATURE(MyClass)/*Mightbeexpandedto#ifndefMYCLASS_FEATURE_CLASS#defineMYCLASS_FEATURE_CLASSclassMyClassFeature{...};#endif*/classMyClass:MyClassFeatu

Rails单表继承验证

有一个Request我的应用程序中的模型。在不同的页面上,我需要不同的验证,例如/contacts我需要验证很多字段,而在“稍后回电”弹出窗口中,我需要仅验证电话号码和名称。我的问题是:保存数据,但没有验证和type没有保存。结构:request.rbclassRequest{where(type:'ContactRequest')}scope:callmebacks,->{where(type:'CallMeBackRequest')}endRoutes.rb:resources:contact_requests,only:[:new,:create],controller:'request

c++ - 模板化类的特殊继承导致成员函数返回模板化类类型而不是继承类类型

假设我有一个这样的基类:templateclassBase{public:Base&operator()(constT&value){this->value=value;return*this;}Tvalue;};现在我想继承这个类来创建特定于类型的类classInheritedFloat:publicBase{}inheritedFloat;现在我尝试在一个函数中捕捉这个继承:voidfunction(constInheritedFloat&inherited){std::cout像这样调用这个函数当然没问题:intmain(){function(inheritedFloat);//

C++继承设计: avoid member duplication

假设有两个C++类,分别支持对文件描述符的只读和只写操作。classReadFd{public:ssize_tread(/**/){//readfromfile_descriptor_}protected:intfile_descriptor_;};classWriteFd{public:ssize_twrite(/**/){//writetofile_descriptor_}protected:intfile_descriptor_;};现在假设要定义一个类ReadWriteFd,它支持读写操作。我的问题是如何设计这样的读写类来避免代码重复?我不能同时继承ReadFd和WriteFd

c++ - 为什么所有现有的 C++ 编译器都不支持继承构造函数?

目前,G++和VC++2010都不支持继承构造函数。但是,我认为这是C++0x中最漂亮的功能之一。而且我认为它应该很容易由编译器实现。为什么编译器对这个特性不感兴趣?假设我想像这样通过继承std::string来设计我自己的字符串类:classMyString:publicstd::string{public://Ihavetoredefinemanyoverloadedctorshereandforwardtheirargumentsto//std::string'sctors.Howtediousitwillbe!!!};一个漂亮的代码示例:structB1{B1(char);};

c++ - 为什么单一虚拟继承不足以解决可怕的菱形继承(钻石问题)?

structB{inti;};structD1:virtualB{};structD2:B{};//上面的代码,编译器仍然要求D2也是virtual:DDd;d.i=0;//error:requestformember`i'isambiguous我不明白的是,一旦您提示编译器B相对于DD是virtual(通过D1)那么为什么i仍然是模棱两可的?(如果我没记错的话,较旧的VC++(2006年)足以通过单个virtual继承来解决这个问题) 最佳答案 B对于DD不是虚拟的-它对于D1是虚拟的。在创建D2时,它包含B的完整拷贝。所以现在D

c++继承 - 具有不同参数类型的相同方法名称

我正在尝试在VC++2010中编译以下代码:classBase{public:std::wstringGetString(unsignedid)const{returnL"base";}};classDerived:publicBase{public:std::wstringGetString(conststd::wstring&id)const{returnL"derived";}};intwmain(intargc,wchar_t*argv[]){Derivedd;d.GetString(1);}我的理解是Derived有两种方法:std::wstringGetString(uns

c++ - 如何通过多重继承实现多态行为?

我从未使用过多重继承,但在最近阅读它时,我开始思考如何在我的代码中实际使用它。当我正常使用多态性时,我通常通过创建声明为基类指针的新派生实例来使用它,例如BaseClass*pObject=newDerivedClass();这样我在派生类上调用虚函数时就能得到正确的多态行为。通过这种方式,我可以拥有不同多态类型的集合,这些类型通过它们的虚函数来管理自己的行为。在考虑使用多重继承时,我在考虑相同的方法,但如果我有以下层次结构,我会怎么做classA{virtualvoidfoo()=0;};classB:publicA{virtualvoidfoo(){//implementation

c++ - 当基类和派生类都继承自 boost::enable_shared_from_this 时出现错误的弱指针

我有一个派生自boost::enable_shared_from_this的基类,然后是另一个派生自基类和boost::enable_shared_from_this的类:#include#includeusingnamespaceboost;classA:publicenable_shared_from_this{};classB:publicA,publicenable_shared_from_this{public:usingenable_shared_from_this::shared_from_this;};intmain(){shared_ptrb=shared_ptr(n

c++ - emplace_back 和继承

我想知道是否可以使用emplace_back将项目存储到vector中,emplace_back是一种派生自vector所期望的类的类型。例如:structfruit{std::stringname;std::stringcolor;};structapple:fruit{apple():fruit("Apple","Red"){}};其他地方:std::vectorfruits;我想在vector中存储一个apple类型的对象。这可能吗? 最佳答案 没有。vector仅存储固定类型的元素。你想要一个指向对象的指针:#include