C++ 多级/多重继承期间对象的大小
大小是否也包括虚拟表。这里也不能有虚拟表,因为没有定义虚拟函数。请帮忙澄清我的疑问 PS:到目前为止我所了解的是:C++ 多级/多重继承期间对象的大小,c++,multiple-inheritance,C++,Multiple Inheritance,大小是否也包括虚拟表。这里也不能有虚拟表,因为没有定义虚拟函数。请帮忙澄清我的疑问 PS:到目前为止我所了解的是: Below is a pseudo declaration for a multilevel inheritance. Base class ( protected int data) derived1 : virtual public base ( protected int data1 ) derived2 : virtual public base ( protecte
Below is a pseudo declaration for a multilevel inheritance.
Base class ( protected int data)
derived1 : virtual public base ( protected int data1 )
derived2 : virtual public base ( protected int data2)
derived3 : derived1,derived2 ( private int data3 )
Main(){ base b; derived1 d1; derived2 d2; derived3 d3; }
sizeof(b) // 4 which is correct as only int (4bytes)
sizeof(d1) // 12 why not 8 -> 4(base) + 4(derived)
sizeof(d2) // ??? whatever applies above should apply here
sizeof(d3) // 24 why not 12 -> 4(base) + 4(derived1/derived2) + 4(d3).
首先,在上面的实现中,您需要返回
count
的类型,而不是void
例如,假设您已声明int count
然后,您需要在“后缀”版本中返回int
,在“前缀”版本中返回int&
或const int&
尝试b=a++
和b=++a
,您将看到(当然,您需要每个函数返回一个值)
这两个版本之间的差异仅在于返回值。“prefix++”返回操作前的count
值,“postfix++”返回操作后的count
值
此外,由于其性质,“postfix++”只能返回递增变量的副本(例如,int
),而“prefix++”也可以返回该变量的引用(例如,int&
)
由于在实现中没有返回任何内容,因此无法利用这两个版本之间的差异。返回类型为
void
将不起作用。它应该返回对象。我不明白你是怎么做到的。如果您正在寻找示例代码,那么已经有关于示例代码的运算符重载的消息。您是否尝试过编译它?你怎么累了?在返回'void'[-fppermissive]的函数中说error:return语句带有值。很抱歉重复评论,但这部分“我已经尝试过了”似乎是个大谎言-1 =(.非常抱歉…是的,复制并粘贴了错误的重载函数…请查看已编辑的部分…删除了return关键字…实际实现在类中有一个count变量。很抱歉浪费您的时间…应该提供正确的代码…但现在这是正确的…请解释运算符o的这两种方法的用法verloading@eyeanandvoid
返回类型对于重载后缀运算符仍然不起作用!请现在查看编辑的部分…删除了return关键字…实际实现在类中有一个count变量。很抱歉浪费您的时间…应该提供正确的代码…但现在这是正确的…请解释使用这两种操作符重载的方法好吧,++
操作符背后的整个想法是它们返回一个值。如果它们不返回任何东西,那么调用“prefix++”和“postfix++”显然会产生同样的影响。正如我在上面的回答中提到的,我仍然不知道在您调用a++
,但没有实现“postfix++”。我还编辑了第二部分:(因此,您的问题中没有任何问题!您已经实现了'prefix++'和'postfix++',并且您正在使用++a
和a++
调用这两个函数。到底发生了什么事情,与您预期的不同呢???void运算符++(int){count++;}有什么用处当只有一个重载可以同时完成这两个任务时…为什么文献中给出了这样的类型
Unless the function is declared virtual in base class,
base *bptr;
derived d;
bptr = &d;
bptr->fun(); // will call the base class function.
But if the fun() is declared virtual then the above code will call derived class fun().