C++对象模型

来源:互联网  时间:2016/9/2 4:31:24

关于网友提出的“ C++对象模型”问题疑问,本网通过在网上对“ C++对象模型”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: C++对象模型
描述:

class Human {
protected:
public:int i;
inline Human(int ii):i(ii)
{std::cout<<"Human construct!"<<>
inline Human(){}
};
class Mother : public virtual Human {
protected:
public:int m;
inline Mother(int ii,int mm):Human(ii),m(mm){std::cout<<"Mother construct"<<>
};
class Father : public virtual Human {
protected:
public:int f;
inline Father(int ff,int ii):Human(ii),f(ff){std::cout<<"Father construct"<<>
};
class Son : public Mother, public Father {
public:
int s;
 inline Son(int ss):Father(1,2),Mother(3,4),Human(0),s(ss)
{
std::cout<<"Son construct"<<>
/*std::cout<<(Father::f)<<>
std::cout<<(Mother::m)<
//std::cout<i<<"   "<f<<"  "<m<<>
}
inline void Print()
{
}
};
typedef void (*Fun)(void);
class Point1d
{
public:
float x;
};
class Point2d//:public  virtual Point1d
{
public:
float y;
};
class Point3d:public virtual Point2d,public  Son
{
public:
inline Point3d(int ss):Son(ss)
{}
float z;
};
struct Base1{int val1;};
struct Base2{int val2;};
struct Derived:Base1,Base2{int val3;};
void func1(int Derived::*dmp,Derived *pd)
{
pd->*dmp;
std::cout<*dmp<<>
}
void func2(Derived *pd)
{
int Base2::*bmp=&Base2::val2;
std::cout<*bmp<<>
func1(bmp,pd);
}
int main()
{
/*Derived d;
d.val1=1;
d.val2=2;
d.val3=3;
func2(&d);*/
//printf("%p\n",&Derived::val1);
//printf("%p\n",&Derived::val22);
/*printf("%d\n",&Mother::i);
printf("%d\n",&Point3d::i);
printf("%d\n",&Point3d::m);
printf("%d\n",&Point3d::f);
printf("%d\n",&Point3d::s);
printf("%d\n",&Point3d::z);*/
    std::cout<<><>
         //此行输出应该是36 实际却是32 ?
std::cout<<><>
system("pause");
return 0;
}
按照C++对象模型 输出的应该是36 呀,为什么是32呢?
请问 各位牛人能指点一下吗?

上一篇关于using声明的问题
下一篇java程序改为c++版本
明星图片
相关文章
《 C++对象模型》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)