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).
大小是否也包括虚拟表。这里再次没有虚拟表,因为没有定义虚函数。请帮助澄清我的疑问。
PS:到目前为止我已经理解了: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().
答案 0 :(得分:1)
首先,在上面的实现中,您需要返回count
而不是void
的类型。
例如,假设您已声明int count
。
然后您需要在'后缀'中返回int
。版本以及'前缀'中的int&
或const int&
版本
尝试b = a++
和b = ++a
,您会看到(当然,您需要每个函数返回一个值)。
这两个版本之间的区别仅在于返回值。 '前缀++'在操作之前返回count
的值,以及' postfix ++'在操作之后返回count
的值。
此外,由于其性质,后缀++' 只能返回正在递增的变量的副本(例如int
),而'前缀++' 也可以返回该变量的引用(例如int&
)。
由于您未在实现中返回任何内容,因此无法使用这两个版本之间的差异。