刚看了一道C++的编程题:遇到个问题,c++有些关系不是很熟,求各位指导指导:

2025-05-18 17:31:09
推荐回答(3个)
回答(1):

1 ClassC是classA和ClassB的子类,属于多重继承。
2 ClassC里有classA和classB。即:classC的对象里包含ClassA和ClassB的对象。
3 因此ClassC对象的首地址可以是ClassA对象的首地址也可以是classB对象的首地址。多态赋值时,编译器会找到对应对象的地址赋值出去。(两个父类对象存放总是有一定顺序,不能都在首地址覆盖存放,一个内存放两个数据明显不可能)。
4 如果我们切换多重继承的顺序,会发现pA和pC一样,而pB和pC的地址又不一样了。pA和pB当然永远不会一样。

总结:
1 多重继承时,子类的内存布局是根据继承顺序进行布局(注意:这个不是规范,各编译器编译的程序如有不同,也有可能)。
2 多重继承多态造型到父类指针时,父类指针指向符合自身数据的内存地址,并不是子类首地址。

回答(2):

采用virtual的成员函数是动态联编,即被调用函数和调用函数的关系及它们的内存地址在编译时是动态的,继而实现了C++的多态性
多态性,基类指针动态的指向子类指针,用同一个基类指针可以操作多个子类对象.
另,静态联编就不能,编译时调用关系和内存地址都确定好了

回答(3):

那地址是不一样的。只是你的输出有问题。pA和pB都是对象指针,指针表示的地址,地址形式是oxcccccccc,但是你却用%d输出,那是有问题的。另外,对象的概念不清晰,printf("%d\n",&aObject);这种写法很有问题,可以学习对象和指针。