看到“深度探索C++对象模型”中关于default constructor的描述:编译器会按照成员变量的声明次序来对成员变量初始化。突然有个想法:假设类中有两个成员变量A,B,其中A的初始化在需要B事先初始化好,而在声明中,A生命在B之后,这么做编译结果会不会出问题。试了一下,果然如此。代码如下

 1#include <stdio.h>
 2
 3class A
 4{
 5    public:
 6        A(int _n)
 7        {
 8            n=_n;
 9            printf("A %d\n",n);
10        }
11        int n;
12};
13
14class B
15{
16    public:
17        B(A a)
18        {
19            printf("B=%d\n",a.n);
20        }
21};
22
23class C
24{
25    public:
26        C()
27        {
28            printf("C\n");
29        }
30};
31
32class ABC
33{
34    public:
35    C c;
36    B b;
37    A a;
38    
39    ABC():a(1),b(a),c()
40    {
41        
42    }
43};
44
45void main()
46{
47    ABC abc;
48}

我本来想让b打印出B=1,结果却并非如此!
但如果将36,37行换过来,结果就对了!
对于程序员来讲,这点一定要注意,否则会带来奇怪的结果,而可恶的vc2005编译器竟然没有任何警告出现!

关于default constructor一个要注意的地方相关推荐

  1. 浅谈工作/学习中找bug的思路_0_调试、try-catch以及打印报错信息和百度的方法、No default constructor for entity: com.gyf.bos.mod

    浅谈工作/学习中找bug的思路_0 文章目录 浅谈工作/学习中找bug的思路_0 调试.try-catch-以及打印报错信息和百度的方法 前言 描述 解决思路1 -- 检查移植的代码,细枝末节也不要忽 ...

  2. C++ Error: no appropriate default constructor available

    我定义了一个结构体,然后初始化它,结果编译报错 no appropriate default constructor available 代码如下: struct matrixXvect_func { ...

  3. 深度探索C++ 对象模型(3)-默认构造函数Default Constructor

    1. Default Constructor只对base class subobjects和member class objects初始化,对data member不做操作 2. 编译器构造Defau ...

  4. JPA映射组合主键时错误:No default constructor for entity

    我们在使用JPA对历史问题处理时,会涉及到组合主键的处理.处理的思路如下: 使用@Embeddabel定义一个组合组键ID ID实现SErializable接口 声明一个protected的构造方法 ...

  5. Default Constructor的构造操作

    文章目录 前言 一.带有默认构造器的 member class object 二.带有 Default Constructor 的 Base Class 三.带有一个 Virtual Function ...

  6. 关于java构造函数 的错误 there is no default constructor available in

    package com.shang; class A{public int i = 0;//带参构造器A(int m){i = 1;} } class B extends A{B(int m){//s ...

  7. Failed to instantiate No default constructor found; nested exception is java.lang.NoSuchMethodExcept

    从网页接受参数,参数多的情况下一般会定义一个类,来装这些参数,比如UserParam这个类就是装网页里面转过来的 id.username.telephone等信息.但是会发现在修改的时候会报如下错误. ...

  8. c++,出现 “no default constructor exists for class”的问题

    C++ 中,如果一个类没有显式定义默认构造函数,那么编译器会自动生成默认构造函数,这个默认构造函数不接受任何参数,它只是分配了对象所需要的内存空间,并不会做其他工作.如果你的类定义了其他构造函数,但没 ...

  9. 在编写flash游戏播放声音时的一个要注意的地方

    在编写flash游戏播放声音时的一个要注意的地方 如果该机子没有装声卡,或是声卡有问题,或操作系统如win 2003 server禁用了声卡,或提示没有活动混音器设备可用 播放声音得不到channel ...

最新文章

  1. 数据库审计服务器性能要求,数据库审计技术指标资质要求-.docx
  2. 这个AI学院取名黄埔,30%学生都是CTO/技术总监,没有落地成果不许毕业
  3. linux du命令重定向,df命令、du命令 、磁盘分区
  4. kafka高可用集群课程介绍
  5. vaadin_Vaadin提示:以声明方式构建UI
  6. java 静态代码块有什么用,java编程开发静态代码块的使用方法都有哪些
  7. jquery java aes_[代码全屏查看]-java、js之间使用AES加密通信数据
  8. % 取余运算 取模运算
  9. JavaScript 常用技巧收集
  10. VSCode打开文件中文乱码
  11. CAD图纸一键共享,永久轻松办公!
  12. C# Winfrom Chart 图表控件 柱状图、折线图
  13. 共享WiFi码项目一天赚3000,一个月6W,背后逻辑与源代码分析
  14. cv::subtract
  15. android获取通讯录号码,Android跳转到通讯录获取用户名称和手机号码的实现思路...
  16. 刀塔OMG塔防1.23单机版使用方法
  17. 路由网关---zuul
  18. 四万字32图,Kafka知识体系保姆级教程宝典
  19. ThinkPHP 笔记
  20. windows网络编程——telnet协议

热门文章

  1. web框架flask(4)——数据库
  2. 镜像的分层结构 - 每天5分钟玩转容器技术(11)
  3. argparse库 学习记录
  4. 转:Jeff Dean的Stanford演讲
  5. 深入探讨struts的ActionMessages消息机制(转)
  6. linux安装vsftp教程,CentOS7 vsftp 安装与配置(视频教程)
  7. Android自定义View的实现方法,带你一步步深入了解View
  8. muduo之TcpServer
  9. BZOJ 1878 HH的项链
  10. java中InputStream和OutputStream的使用场景