草庐IT

c++ - 子类转换和指针地址更改

我在C++中使用多重继承已有很长时间了,但直到今天才意识到这可能意味着在将它们作为子类之一引用时指针地址可能不同。例如,如果我有:classClassA{public:intx;inty;ClassA(){cout在构造函数上打印时,A类和C类具有不同的地址。然而,当我尝试将它们相互转换回对方时,它会自动运行:ClassA*the_a=(ClassA*)b;cout我想这种信息可以由编译器从代码中派生出来,但是假设这适用于所有编译器是否安全?附加问题:是否可以强制子类位置的顺序?例如,如果我需要首先定位classA(本质上,共享相同的指针位置)作为它的子类的ClassC,我是否只需要将

c++ - 子类指针如何严格等于父类指针?

我在两种智能指针之间编写了一个运算符==,我想我应该运行一个快速的健全性检查。我对结果感到惊讶...在下面的代码片段中,为什么f和b的所有变体最终都具有相同的值?structFoo{intx;};structBar:publicFoo{inty;};#includeintmain(){Barbar;Foo*f=&bar;Bar*b=&bar;std::cout(f);intbi=reinterpret_cast(b);std::cout 最佳答案 关于基类对象与其子类对象的地址不同的唯一情况是涉及多重继承。在上面的例子中,内存大概是

c++ - 当类是子类时重载赋值运算符

如何使用赋值运算符实现设置基类成员?例如,如果有人像这样在派生类中定义赋值运算符:(其中colour和Colour()都是基类的成员-意味着下面指出的行是非法的)Derived&Derived::operator=(constDerived&rhs){if(&rhs!=this){Colour(rhs.colour);//notallowedColour(rhs.Colour());//notallowed}return*this;}解决方法是什么?有没有办法在基础中链接运算符重载?我会做类似...的事情吗?Derived&Derived::operator=(constDerived

c++ - 返回子类的 const 引用

我所知道的我知道返回临时对象的const引用是可以的!(像这个例子:)classA{public:virtualconstA&clone(){return(A());}virtualstd::stringname()const{return("A");}};Returningtemporaryobjectandbindingtoconstreference但是!如果我想这样做,它仍然是正确的:classB:publicA{public:virtualconstA&clone(){return(B());}virtualstd::stringname()const{return("B")

C++在子类中调用虚方法

我有以下类(class):classA{protected:A*inner;public:....virtualvoiddoSomething()=0;....}classB:publicA{...voiddoSomething(){if(inner!=NULL)inner->doSomething();}...}当我使用inner->doSomething()时,我遇到了段错误。我应该怎么做才能在B类中调用inner->doSomething()?提前致谢。 最佳答案 如果没有对成员inner进行显式初始化,它可能既不为NULL又

c++ - 选择正确的子类以编程方式实例化

好的,上下文是一些序列化/反序列化代码,它将字节流解析为更易于使用的“对象”表示(反之亦然)。这是一个带有基本消息类的简化示例,然后根据“类型”header,存在更多数据/函数,我们必须选择正确的子类来实例化:classBaseMessage{public:enumType{MyMessageA=0x5a,MyMessageB=0xa5,};BaseMessage(Typetype):mType(type){}virtual~BaseMessage(){}Typetype()const{returnmType;}protected:TypemType;virtualvoidparse(

c++ - 如何子类化模板化基类?

我有以下数据结构:structfastEngine{...}structslowEngine{...}templateclassCar{Tengine;vectorbackupEngines;virtualvoiddrive()=0;}classFastCar:publicCar{virtualvoiddrive(){//usethevaluesof"engine"insomeway}}classSlowCar:publicCar{virtualvoiddrive(){//usethevaluesof"engine"insomeway}}Car*getCarFromCarFactory

zookeeper源码(06)ZooKeeperServer及子类

ZooKeeperServer实现了单机版zookeeper服务端功能,子类实现了更加丰富的分布式集群功能:ZooKeeperServer|--QuorumZooKeeperServer|--LeaderZooKeeperServer|--LearnerZooKeeperServer|--FollowerZooKeeperServer|--ObserverZooKeeperServer|--ReadOnlyZooKeeperServer主要字段//tickTime参数默认值publicstaticfinalintDEFAULT_TICK_TIME=3000;protectedinttickTi

没有子类的 C++ 对象?

我想知道是否有一种方法可以在C++中声明一个对象以防止它被子类化。是否有等同于在Java中声明最终对象的方法? 最佳答案 来自C++FAQ,sectiononinheritanceThisisknownasmakingtheclass"final"or"aleaf."Therearethreewaystodoit:aneasytechnicalapproach,aneveneasiernon-technicalapproach,andaslightlytrickiertechnicalapproach.The(easy)techni

ios - UITableViewCell 子类的行为不像 UITableViewCells

我的函数接受类型为(cell:UITableViewCell,item:AnyObject)->()的函数作为参数。我的问题是,当我尝试将具有UITableViewCell的子类的函数作为参数传递时,出现错误:无法将类型“(tableCellSubclass,post:Post)->()”的值转换为预期的参数类型“(cell:UITableViewCell,item:AnyObject)->()”如何更改类型为(cell:UITableViewCell,item:AnyObject)->()的函数,以便使用UITableViewCell的子类的函数符合它?这里是相关的代码片段。第一个是