{
public:
A(){i=1;d=1.2;}
int i;
double d;
};
class B:public A
{
public:
B(){i=2;d=2.2;}
int i;
};
class C:public B
{
public:
C(){i=3;i=3.2;}
double d;
}
int main()
{
C derived2;
B* pderived;
A* pbase;
cout<<derived2.i<<derived2.d<<endl;
cout<<pderived->i<<pderived2->d<<endl;
cout<<pbase->i<<pbase->d<<endl;
}
对于以上的代码看的有点晕,请人指点迷津~~是否和虚函数类似?
6 个解决方案
#1
int main()
{
C derived2;
B* pderived =&C ;
A* pbase=&C;
cout<<derived2.i<<derived2.d<<endl;
cout<<pderived->i<<pderived2->d<<endl;
cout<<pbase->i<<pbase->d<<endl;
}
忘了写=了。
{
C derived2;
B* pderived =&C ;
A* pbase=&C;
cout<<derived2.i<<derived2.d<<endl;
cout<<pderived->i<<pderived2->d<<endl;
cout<<pbase->i<<pbase->d<<endl;
}
忘了写=了。
#2
B* pderived =&C ;
A* pbase=&C;
错了.
A* pbase=&C;
错了.
#3
变量查找循序C->B->A
#4
这个跟构造顺序有关的,
类实例在构造时,先构造它的基类成员,
于是C构造时,要先构造B,而B构造时又要先构造A。
1、构造A,A.i=1, A.d=1.2
2、构造B,B的i已经与A的i无关,但是B与A共用d,
所以,B构造i=2时,不影响A.i,
B构造d=2.2时影响了A.d
A.i=1, A.d=2.2, B.i=2, B.d=2.2
3、构造C时,C的d不影响B的d,但是C的i会影响B的i
a.i=1, a.d=2.2, b.i=3, b.d=2.2, c.i=3, c.d=3.2
明白了没?
类实例在构造时,先构造它的基类成员,
于是C构造时,要先构造B,而B构造时又要先构造A。
1、构造A,A.i=1, A.d=1.2
2、构造B,B的i已经与A的i无关,但是B与A共用d,
所以,B构造i=2时,不影响A.i,
B构造d=2.2时影响了A.d
A.i=1, A.d=2.2, B.i=2, B.d=2.2
3、构造C时,C的d不影响B的d,但是C的i会影响B的i
a.i=1, a.d=2.2, b.i=3, b.d=2.2, c.i=3, c.d=3.2
明白了没?
#5
如果还有疑问,你就再加三行代码:
cout<<sizeof(A)<<endl;
cout<<sizeof(B)<<endl;
cout<<sizeof(C)<<endl;
看看它们占多少内存,就能想像它们的变量是怎么相处的。
cout<<sizeof(A)<<endl;
cout<<sizeof(B)<<endl;
cout<<sizeof(C)<<endl;
看看它们占多少内存,就能想像它们的变量是怎么相处的。
#6
谢谢 toumao
#1
int main()
{
C derived2;
B* pderived =&C ;
A* pbase=&C;
cout<<derived2.i<<derived2.d<<endl;
cout<<pderived->i<<pderived2->d<<endl;
cout<<pbase->i<<pbase->d<<endl;
}
忘了写=了。
{
C derived2;
B* pderived =&C ;
A* pbase=&C;
cout<<derived2.i<<derived2.d<<endl;
cout<<pderived->i<<pderived2->d<<endl;
cout<<pbase->i<<pbase->d<<endl;
}
忘了写=了。
#2
B* pderived =&C ;
A* pbase=&C;
错了.
A* pbase=&C;
错了.
#3
变量查找循序C->B->A
#4
这个跟构造顺序有关的,
类实例在构造时,先构造它的基类成员,
于是C构造时,要先构造B,而B构造时又要先构造A。
1、构造A,A.i=1, A.d=1.2
2、构造B,B的i已经与A的i无关,但是B与A共用d,
所以,B构造i=2时,不影响A.i,
B构造d=2.2时影响了A.d
A.i=1, A.d=2.2, B.i=2, B.d=2.2
3、构造C时,C的d不影响B的d,但是C的i会影响B的i
a.i=1, a.d=2.2, b.i=3, b.d=2.2, c.i=3, c.d=3.2
明白了没?
类实例在构造时,先构造它的基类成员,
于是C构造时,要先构造B,而B构造时又要先构造A。
1、构造A,A.i=1, A.d=1.2
2、构造B,B的i已经与A的i无关,但是B与A共用d,
所以,B构造i=2时,不影响A.i,
B构造d=2.2时影响了A.d
A.i=1, A.d=2.2, B.i=2, B.d=2.2
3、构造C时,C的d不影响B的d,但是C的i会影响B的i
a.i=1, a.d=2.2, b.i=3, b.d=2.2, c.i=3, c.d=3.2
明白了没?
#5
如果还有疑问,你就再加三行代码:
cout<<sizeof(A)<<endl;
cout<<sizeof(B)<<endl;
cout<<sizeof(C)<<endl;
看看它们占多少内存,就能想像它们的变量是怎么相处的。
cout<<sizeof(A)<<endl;
cout<<sizeof(B)<<endl;
cout<<sizeof(C)<<endl;
看看它们占多少内存,就能想像它们的变量是怎么相处的。
#6
谢谢 toumao