草庐IT

派生词

全部标签

c++ - 不能在派生类中使用 protected 运算符==

#includeclassFoo{public:intm_foo;Foo(inta_foo):m_foo(a_foo){}protected:booloperator==(constFoo&a)const{std::cout在我的真实代码中,Foo是一个可以实例化但不应该被允许使用operator==的类,所以我将它设为protected。执行此操作时出现编译器错误:foo.cpp:Inmemberfunction‘boolBar::operator==(constBar&)const’:foo.cpp:9:7:error:‘boolFoo::operator==(constFoo&)

c++ - 有没有办法使用静态断言和类型特征来防止类被派生两次?

我意识到这是一个人为的例子,但我想要一个编译检查来防止这种情况......classA{};classB:publicA{};classC:publicA{};classD:publicB,publicC{BOOST_STATIC_ASSERT((is_base_of_once::value))}; 最佳答案 以下应该有效:BOOST_STATIC_ASSERT(((A*)(D*)0==0))如果A存在两次,这应该会产生歧义错误,否则测试将始终成功(因为它比较两个空指针)。 关于c++-

c++ - 派生类外的纯虚函数定义

我在头文件中有抽象基类和派生类。是否可以在派生类之外定义纯虚函数?例如://file.hclassBaseclass{public:virtualintvfunc()=o;//assumeCtorandDctor};classDerivedclass:publicBaseclass{public:intvfunc();//assumeCtorandDctor};现在在cpp文件中:#includeintDerivedclass::vfunc(){//Bodyofthefunction}上述方法是否正确/可行? 最佳答案 这不仅是可能

c++ - 是否可以在编译时检查类型是否派生自模板的某些实例化?

我想编写一个模板函数,如果传递的类型是从另一个类的任何模板实例派生的,则它以一种方式运行,否则以另一种方式运行。我认为下面的代码捕捉到了我想做的事情。不幸的是,Caller为double和Derived打印“generic”。#includetemplatestructBase{};structDerived:publicBase{};templatevoidFoo(constT&){std::coutvoidFoo(constBase&){std::cout"voidCaller(constT&t){Foo(t);}intmain(){doublex;Caller(x);Derive

c++ - 如何在派生类中存储在基类初始化期间获得的信息?

我的情况是,作为提供数据来初始化基类的副作用,派生类计算了一条信息,该信息稍后必须通过其接口(interface)提供。下面给出了问题的想法,使用bool值作为所需的信息:classbase{public:base(some_initialization_data);//...};classderived:publicbase{public:derived():base(calc_init_data()){}boolcondition_x_occurred()const{//Howtogetattheinformationobtained//duringthecalltocalc_in

c++ - 使用模板和构造函数从两个派生类进行多重继承

我正在按照here中的示例进行操作,但是我正在使用模板并调用其中一个派生类的构造函数。下面的代码在没有模板的情况下工作,但当包含时我不确定为什么会出现以下错误::error:nomatchingfunctionforcallto‘AbsInit::AbsInit()’NotAbsTotal(intx):AbsInit(x){};^代码如下:#includeusingnamespacestd;templateclassAbsBase{virtualvoidinit()=0;virtualvoidwork()=0;};templateclassAbsInit:publicvirtualAb

c++ - 继承函数返回派生类,而不是基类

在C++中是否可以在Base类中制定返回Base类型的函数,以便在Derived类中,它们返回Derived类型,而不重载?最小的例子:classBase{public:Base(doublev){value=v;}Baseadd(Baseb){returnBase(b.value+this->value);}voidprint(){std::cout动机在实际例子中,Base代表一个线性代数矩阵,Derived代表一个vector。矩阵提供了许多适用于vector的函数,例如标量的加法或乘法。在这种情况下,最好不必手动覆盖所有这些矩阵函数来返回vector。如果可能的话,我想表达无论

c++ - 基类的派生类充当抽象类

我定义了一个父类(superclass)元素。有一些element的派生类,比如triangle,quad和cube。一些element对象是边界元素。如果element是边界元素,那么我必须定义额外的数据成员和函数。如果element类不是基类,我可以很容易地派生一个boundary_element类。(我的意思是,如果triangle,quad和cube是单独的类我可以定义单独的派生类,如boundary_triangle、boundary_quad和boundary_cube).所以我的问题是我必须定义一个子类boundary_element,它必须是定义派生类boundary_

c++ - 如何使用不同的方法实现从抽象派生的类?

我实现了从抽象类派生的不同类,每个类都有不同的方法。问题是我必须只在运行时声明对象,所以我必须创建一个指向基类的指针,我不能使用每个派生类的方法。我创建了一个示例来更好地解释我的意思:#includeusingnamespacestd;classpoligon{public:doubleh,l;voidsetPoligon(doubleh,doublel){this->h=h;this->l=l;}virtualdoubleGetArea()=0;virtualvoidGetType()=0;};classtriangle:publicpoligon{doubleGetArea(){r

c++ - 派生类中的重载运算符

我正在学习Lafore的第4版C++书籍,但我遇到了这个问题。我有这两个类,CountDn派生自Counter。在CountDn中,我想重载递减运算符的前缀和递增和递减的后缀。它适用于所有运算符,除非我尝试执行++c11。我从编译器中得到这些错误:50:10:error:nomatchfor'operator++'(operandtypeis'CountDn')50:10:note:candidateis:41:13:注:CountDnCountDn::operator++(int)41:13:note:candidateexpects1argument,0provided尽管get_