草庐IT

c++ - 无法使用基类指针调用派生类函数

我想使用基类指针调用未在基类中定义的派生类函数。但这总是会引发错误:errorC2039:‘derivedFunctionName’:isnotamemberof‘BaseClass’你知道我该如何解决这个问题吗?谢谢, 最佳答案 您不能通过指向基类的指针调用只出现在派生类中的成员;您必须首先将它(可能使用dynamic_cast)转换为指向派生类型的指针——否则编译器根本不知道该方法是否存在。它可能看起来像这样:voidsomeMethod(Base*bp){Derived*dp=dynamic_cast(bp);if(dp!=n

c++ - 派生类的指针可以类型转换为其基类的指针吗?

new返回的派生类指针可以类型转换为其基类指针。这是真的还是假的?我知道dynamic_cast可以用来施放缺点。一般如何将派生类的指针强制转换为基类的指针? 最佳答案 是的。从指向派生类的指针到指向基类的指针的转换是隐式的。因此,以下内容完全没问题:structB{};structD:B{};D*my_d_ptr=newD;B*my_d_ptr_as_a_b_ptr=my_d_ptr; 关于c++-派生类的指针可以类型转换为其基类的指针吗?,我们在StackOverflow上找到一个类

c++ - 从基类指针 C++ 访问子类成员

我有一组自定义类Student对象。CourseStudent和ResearchStudent都继承自Student,Student的所有实例都是其中之一。我有一个函数可以遍历数组,确定每个学生的子类型,然后对它们调用特定于子类型的成员函数。问题是,因为这些函数没有被重载,所以在Student中找不到,所以编译器大惊小怪。如果我有一个指向Student的指针,是否有办法获得指向该Student子类型的指针?我是否需要在此处进行某种伪造的转换以绕过编译时错误? 最佳答案 最好的办法是使用虚函数:classStudent{//...vi

C++继承,从基类调用派生函数

如何从基类调用派生函数?我的意思是,能够将一个函数从基类替换为派生类。例如classa{public:voidf1();voidf2();};voida::f1(){this->f2();}/*heregoesthea::f2()definition,etc*/classb:publica{public:voidf2();};/*heregoestheb::f2()definition,etc*/voidlala(ints){a*o;//Iwantthistobeclass'a'inthisspecificexampleswitch(s){case0://typebo=newb();b

c++ - 是否可以从 C++ 中的基类方法返回派生类?

我想这样做:classDerived;classBase{virtualDerivedf()=0;};classDerived:publicBase{};当然这是行不通的,因为我不能返回不完整的类型。但是我也不能在base之前定义Derived,因为我也不能从不完整的类型继承。我想我可以使用模板作为解决方法(使用Derived作为Base的模板参数),但这似乎是一种非常丑陋的做事方式。是否还有其他方法?详细说明:我正在编写一个光线追踪器,每个Shape类都有一个返回其边界框的函数。但是,我已将BBox设为Shape的子类,因此我可以将其可视化。这是糟糕的设计吗?

c++ - 将非模板基类向下转换为模板化派生类 : is it possible?

我正在为游戏实现一个事件系统。它使用事件队列和数据结构来保存给定事件类型的所有已注册事件处理程序。到目前为止注册处理程序工作正常,但是当涉及到注销它们时(例如,当游戏对象被销毁时会发生的事情)我在模板和转换方面遇到了一些麻烦。我将EventHandler定义为某种仿函数,部分基于SzymonGatner关于http://www.gamedev.net/reference/programming/features/effeventcpp/的文章.准确地说,我采用了HandlerFunctionBase和MemberFunctionHandler类定义并提出:classBaseEventH

c++ - 空基类优化

下面是ebco上的简单测试,我在vc9和g++上都编译了。两个编译器的输出不同。我想知道的是vc的行为是否符合。#includeclassempty{};classempty_one:publicempty{};classempty_two:publicempty{};classnon_empty:publicempty_one,publicempty_two{};intmain(){std::cout(static_cast(&a[0]));void*pe20=static_cast(static_cast(&a[0]));std::cout(static_cast(&a[1]));

c++ - 从基类实例化派生对象

尝试创建一个Driver类型类,其中,下面的Base是在实例化时传递类型的Driver。类型,在本例中为2,用于构造正确的派生对象。我的编译器在“ClassBase”行抛出声明语法错误。我的最终目标是能够做到这一点:Base*B;B=newBase(2);if(B){B->DoStuff();B->DoMoreStuff();deleteB;}这是我无法编译的代码...classBase{public:Base(inth);virtual~Base();private:inthType;Base*hHandle;};classDerived1:publicBase{public:Der

c++ - 在基类中调用同名方法

基类A有一个子类B,B有一个子类C。A实现了一个虚方法doStuff(),B没有,C有。在C中,我想调用A的doStuff()实现(我在C中执行此操作是doStuff()的实现,但这并不重要。)我应该调用:A::doStuff();或者:B::doStuff();第一个看起来更清楚,因为它指的是实际实现。另一方面,如果我稍后决定B需要以不同于A的方式doStuff(),则第二个可能更有用。哪个更标准?哪个更危险?我有点惊讶B::doStuff()没有触发任何警告,但我想根据定义B有一个实现,即使它来自基类。基类和实现链可以任意长和复杂吗?例如,如果我有A到Z,每个都是前一个的子类,我可

c++ - 找不到基类模板的成员

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:WhydoIhavetoaccesstemplatebaseclassmembersthroughthethispointer?我有一个如下所示的类层次结构:templateclassBase{protected:Tt;};templateclassDerived:publicBase{public:Tget(){returnt;}};intmain(){Derivedd;d.get();}问题是protectedmembervariabletisnotfoundintheBaseclass.编译器输出:pr