我有两个继承自类Sensor的类Sensor1和Sensor2。我正在创建基于运行时某些条件的基类应该是Sensor1或Sensor2的类Camera。可能吗?一种方法是在Camera中为Sensor创建一个指针成员,然后分配给Sensor1或Sensor2(基于条件),在这种情况下,对于Sensor的所有方法,我需要在Camera中创建方法(setResolution&changeMode)并调用相应的方法(我想避免)classSensor{public:Sensor(){}~Sensor(){}voidsetResolution(intw,inth){};voidchangeMod
如果我正在创建一个抽象基类,并且从它派生的类将具有一些相同的数据成员,那么让这些成员在抽象基类中私有(private)化并授予对它们的protected访问是否更好??或者不打扰而只是将数据成员放在派生类中。这是在C++中。 最佳答案 在OOP设置中要问的主要问题是:这些数据属于哪里?在继承关系中,数据(和功能)应该在或多或少不变的最高阶段定义。这促进了最大程度的模块化和代码重用。例如,假设有两个类:classHuman;classStudent:publicHuman;添加数据成员“m_Arms”时,我们根据以下问题确定“Huma
这更像是一个设计问题。目前我有多个类(在不同的项目中),它们具有不同的角色,但有一种通用方法执行相同的职责。我正在考虑为所有这些类创建一个基类,以便它们中的每一个都可以继承此类并实现此方法以节省重复。我的问题是我应该为多个项目中的所有类设置一个基类,还是应该为每个项目设置一个基类?谢谢, 最佳答案 我会定义一个包含该共享方法的接口(interface)。然后我会将该接口(interface)放在它自己的项目中。然后让您的具体实现引用该项目并实现接口(interface)。像这样的..Repositories.projIReposit
我想知道c++是否像奇怪的重复模板模式一样保证将祖母基类向下转换为孙子类。以下代码在我的环境中运行良好。但是我不确定它是否适用于任何条件/环境。请告诉我你所知道的。非常感谢。附言。老实说,我不确定我询问堆栈溢出的方式是好是坏。如果您发现不好的地方,请告诉我。再次感谢。#includetemplateclassGrandBase{public:voidprint(void){constGrandChild*grand_child=static_cast(this);std::coutgrand_child_valueclassBridgeClass:publicGrandBase{};c
我从多重继承、虚拟方法和指向基类的指针中得到了我没想到的结果。使用d.getStr(),当d是一个derived实例时,调用base_2版本,如我所料。使用p->getStr(),当p是指向derived实例的指针(或指向base_2的指针指向一个derived实例),base_2版本被调用,如我所料。但是对于p->getStr(),当p是指向base_1的指针时,指向derived实例,调用了base_1版本,我确信会调用base_2版本(感谢using和getStr()是虚拟方法)。下面是一个简单的例子:#includestructbase_1{virtualstd::string
我正在使用wxWidgets,如果您曾经使用过它,您就会知道基类中有很多公共(public)函数。我最近遇到了一种情况,我不希望直接从派生类调用方法SetText()。也就是说,派生类继承了SetText()函数,但我不希望客户端可以使用此函数。相反,我提供了两个调用SetText()的新函数,但在执行一些额外操作之前不会调用。目前,客户端(我!)可以忘记调用特殊函数而只需调用SetText()。因此,将不会执行一些额外的操作。这些操作非常微妙,很容易被忽视。那么,我能否将个别函数标记为私有(private)函数,以便客户端无法调用它们,或者只是让客户端无法直接调用它(他们将不得不使用
这似乎是一个愚蠢的问题,但我希望能够在一行中实例化派生类并将其分配给基类:classA{};classB:publicA{};//icandothisA*base;Bderived;base=&derived;//i'dliketodosomethinglikethisA*base;base=&B();//producesawarning:takingaddressoftemporary我试图在不使用new运算符的情况下获得多态行为。我认为编译器正在插入对构造函数返回值的临时引用。是否可以指示编译器我实际上想使用该地址进行分配?*编辑这里有一点背景。解析xml文件时,我有这样的事情:c
我有以下场景:根据Derived类构造函数的输入值,我需要调用不同的Base类构造函数。如:structBase{Base():v(0){}Base(int_v):v(_v){}intv;};structDerived{Derived(intv)/*ifv==42callBase()elsecallBase(int)*/{}};intmain(){Derivedf2(42);Derivedf1(1);}以我目前对C++的了解,我认为这是不可能的,所以我询问社区是否知道任何黑客攻击或脏代码可以使这成为可能。请不要让简单的int误导您,现实生活中的场景要复杂得多。随意混合使用C++11魔法
考虑以下程序:templatestructt{structbase{voidf1();};structderived:base{voidf2(){f1();}};};在derived::f2中,非限定查找用于查找f1。base会被搜索吗?base::f1会被找到吗?base是依赖类型吗?请引用标准来证实您的答案。 最佳答案 是的,base是相关的,因此找不到f1。在C++03中,addition明确了这一点。14.6.1/2d(在C++98中不存在),在C++0x中直接由14.6.2.1/6(n3126)声明。它的依赖很重要,因为下
用clang3.4(trunk),有什么方法可以用常量表达式计算基类的位移吗?structA{inta;};structB{intb;};structC:A,B{};//cannotaccessbaseclassofnullpointer:constexprautoc_b_address=/*(size_t)*/&(B&)*(C*)nullptr; 最佳答案 是的,可以用常量表达式计算基类的位移,但它根本不可移植。你可以使用一个鲜为人知但documentedclang也支持的gcc扩展。当与运算符?::一起使用时,它涉及到__bui