如何进行C 环境编译
创始人
2024-06-21 10:21:28
0

C++环境的世界中有这样两个概念,向上类型转换,向下类型转换,分别描述的是子类向基类和基类向子类的强制类型转换,因此可以在使用的过程当中感受到趣味性和吸引力。

  1. void swap(int &a,int &b)  
  2. {  
  3.     //...  
  4. }   
  5. 2.请写出以下结构或类的大小(sizeof的输出值),并给出简要的解释.  
  6. //A:  
  7. typedef struct  
  8. {  
  9.  char c1;  
  10.  char c2;  
  11.  int n;  
  12. } stru;  
  13. //B:  
  14. class ClassA  
  15. {  
  16.  public:  
  17.  int m_data1;  
  18.  int m_data2;  
  19.  void func1() { }  
  20.  void func2() { }  
  21.  virtual void vfunc1() { }  
  22.  virtual void vfunc2() { }  
  23. };  
  24. //C:  
  25. struct ClassB {  
  26.  void f();  
  27. };  
  28. B::f(){  

有兴趣的看客可以先不看我下面的正确答案,试着作出自己的答案........

1.原题的考点就在于 Y() : b("b"), a("a"), X("base") {} 构造函数Y()冒号后面的这一串东西,说实话刚开始做的时候我只记得和初始化有关系,正确的名称其实是 "初始化参数列表".它的关键作用是在进入构造函数前完成对某些数据的初始化工作,在program1中的意思就是优先于Y()构造函数本身完成对象b和a的初始化,b("b"),a("a")就相当与X b(X("b"));X a(X("a")) 也就是通过拷贝构造函数完成。

2.可能有人要问 X("base")怎么这么用, 其实很简单,注意 Y 是X 的子类, 子类和父类构造函数的关系我想人人皆知,即先调用父类构造函数,这里的X("base")就是指定在调用Y()构造函数之前调用的父类X的构造函数是C++环境而不是 X(), 这里有些绕口,可以试着把 X("base")换成X(), 就明确具体的意思了。

3.最后一个关键点就是program1的结果输出顺序问题,我估计有些人的答案是 b , a ,base  或者 base , b ,a ,这里有两个意思, 第一,main 函数里申明 y, 所以正确执行顺序应该是 Y的父类X的构造函数(注意Y初始化参数列表中指明了Y的父类X究竟应该调用哪个构造函数)------>Y的私有成员变量的构造函数(注意Y初始化参数列表中指明了私有成员变量究竟应该调用哪个构造函数)------>Y的构造函数,对于program1 就是需要先调用X("base") ;

第二, 所有私有成员变量的构造函数的调用顺序与申明此变量的顺序保持一致,而跟调用变量的顺序无关,对于program1,调用Y构造函数调用私有变量顺序为先b后a, 而申明私有变量顺序为先a后b,所以后者是正确结果 ,综上,构造函数调用顺序依次为 X("base"),X("a"),X("b"),Y()

4.弄明白以上三点,我们再来看program2, 那就简单多了,program2没有任何trap,规规矩矩按照先父类构造,后私有变量构造,再子类构造的顺序,输出结果中的第一个XXX是Y的父类X的构造, 第二和第三个C++环境分别是类Y中变量a,b(注意顺序)的构造,最后是Y构造中的四输出。

就是static加上去看似很方便,但你怎么知道就应该分配256个字节呢?但是如果动态分配就要用到堆,那释放谁来释放呢?所以我个人认为最好的办法是这个函数加个str的参数,由客户程序员自己填。这样可以把错误控制住。但如果实在不愿意这样,我认为只能用智能指针了。关于智能指针就不展开说了,太多了。

【编辑推荐】

  1. 简介学习C++总结之谈
  2. 对C++库函数进行学习探索总结笔记
  3. C++类库设计的基本构思与方法
  4. C++语言真的还有市场价值?
  5. C++类库设计的基本构思与方法

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...