由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - A C++ puzzle for me
相关主题
some c++ question.关于C++中一个Class的大小 (转载)
问题:vptr/vtable for virtual function & vptr/vtable for数组定义的时候,分配空间了么?
问一个C++文件读取的问题C++ interdependence question
a simple question for C++ class问个简单的memory allocation 的问题。
我这个C++程序有没有什么问题啊?请指点。。。谢谢。。。ask a simple question about int pointer.
数组问题[合集] 求助: socket传递C++ class的问题
请教一个fseek和_fseeki64的问题问个g++的问题
difference between: char** p and char*p[] ??a weak c question, how to pass an array into a function?
相关话题的讨论汇总
话题: int话题: pb话题: class话题: p1话题: pc
进入Programming版参与讨论
1 (共1页)
c**a
发帖数: 316
1
class A
{
int x;
};
class B
{
int y;
};
class C : public A, public C
{
int z;
};
sizeof(A) = 4
sizeof(B) = 4
sizeof(C) = 12
这都没问题。
但是,
C c;
B b;
B* p = &c;
C* q = &c;
B* p1 =&b;
p和q 居然都指向同一地址,
p->y; p1->b;
由于 c 是derived, 其内部layout 和 B 不一样,
我想象应该有 不同的 offset 来使其work。 但是不是这样。
p 和 p1 都分别指向 c 和b 的开始。
p->y; p1->b; 为什么都能正常工作呢?
而且 并没有 额外分配空间, 来在 runtime 实现 offset (像Vtable 那样)。
c**a
发帖数: 316
2
没有人知道吗?

【在 c**a 的大作中提到】
: class A
: {
: int x;
: };
: class B
: {
: int y;
: };
: class C : public A, public C
: {

r*********r
发帖数: 3195
3
你的代码能编译吗? class C 继承自己?
c**a
发帖数: 316
4
继承 B , typo.

【在 r*********r 的大作中提到】
: 你的代码能编译吗? class C 继承自己?
r*********r
发帖数: 3195
5
那还有什么问题?
B* p = &c; 编译的时候, 编译器算了一下offset, 加到c 的开始地址, 再赋给p.
t****t
发帖数: 6806
6
你把C的地址赋给一个A*, 看看数字, 估计你就明白了

【在 c**a 的大作中提到】
: class A
: {
: int x;
: };
: class B
: {
: int y;
: };
: class C : public A, public C
: {

c**a
发帖数: 316
7
C c;
A* p = &c;
C* q = &c;
p 和 q 的数值完全一样, 所以搞不懂。。。
如果 不一样, 我就懂了。。。

【在 t****t 的大作中提到】
: 你把C的地址赋给一个A*, 看看数字, 估计你就明白了
c**a
发帖数: 316
8
我也是这样想得。
可是 B* p = &c;
C* q = &c;
p 和 q 在数字上相等。。。
你确定在 gcc 上 他们不相等?
在 VC 2008 上 他们相等。。。。
至少我这里是。

【在 r*********r 的大作中提到】
: 那还有什么问题?
: B* p = &c; 编译的时候, 编译器算了一下offset, 加到c 的开始地址, 再赋给p.

t****t
发帖数: 6806
9
you mean &c as A*, B*, C* are all the same? on gcc they are not.
#include
#include
#include
using namespace std;
class A { int a; };
class B { int b; };
class C : public A, public B { int c; };
int main() {
C c;
C *pc=&c;
B *pb=&c;
A* pa=&c;
cout<<"pc="<
: 我也是这样想得。
: 可是 B* p = &c;
: C* q = &c;
: p 和 q 在数字上相等。。。
: 你确定在 gcc 上 他们不相等?
: 在 VC 2008 上 他们相等。。。。
: 至少我这里是。

s******n
发帖数: 21
10
Tried VS2008 on Window XP (32 bit), where
C *pc=&c;
B *pb=&c;
A* pa=&c;
output:
pc=0012FF58 pb=0012FF5C pa=0012FF58
pc = pa
pb = pc + 4
No sure why you are seeing different results.

【在 c**a 的大作中提到】
: 我也是这样想得。
: 可是 B* p = &c;
: C* q = &c;
: p 和 q 在数字上相等。。。
: 你确定在 gcc 上 他们不相等?
: 在 VC 2008 上 他们相等。。。。
: 至少我这里是。

1 (共1页)
进入Programming版参与讨论
相关主题
a weak c question, how to pass an array into a function?我这个C++程序有没有什么问题啊?请指点。。。谢谢。。。
What is size_t mean in C?数组问题
含泪流血裸奔完整代码回答C++弱问题请教一个fseek和_fseeki64的问题
C++ Interview Questiondifference between: char** p and char*p[] ??
some c++ question.关于C++中一个Class的大小 (转载)
问题:vptr/vtable for virtual function & vptr/vtable for数组定义的时候,分配空间了么?
问一个C++文件读取的问题C++ interdependence question
a simple question for C++ class问个简单的memory allocation 的问题。
相关话题的讨论汇总
话题: int话题: pb话题: class话题: p1话题: pc