【C++杂谈0】记录一些我容易犯错的C++细节

印象笔记公开链接被封

1、默认是私有类型的


2、构造函数调用顺序
基类构造函数  之后成员对象的构造函数 之后派生类的构造函数
下面我们探究一些成员对象在哪里构造的
class   C
{
public  :
      C()
      {
            printf(  "C constructor\n"  );
      }
};
class   A
{
public  :
        C  c;
      A():c(new C()){ printf(  "A constructor\n"  ); c =  C (); };
        virtual   void  foo(){
            printf(  "Base Class Constructor."  );
      }
};
int  main()
{
        A  a;
}

显示调用了基类C的构造函数 之后应该是A的构造函数里面有一句  之后A的构造函数里面有C的初始化  所有再次生成对象

class   C
{
public  :
      C()
      {
            printf(  "C constructor\n"  );
      }
      C(  int   i )
      {
            printf(  "have num %d constructor\n"  , i  );
      }
};
class   A
{
public  :
        C  c;
      A():c(123){printf(  "A constructor\n"  );c =  C  ();};
        virtual   void  foo(){
            printf(  "Base Class Constructor."  );
      }
};
int  main()
{
        A  a;
}

这个是拿来证明前面那份代码是调用了参数列表的构造函数 


总结:
尽量在参数列表初始化成员对象,如果再构造函数中初始化 会浪费时间在  一个成员对象的构造函数和析构函数中  因为在派生类的构造函数中重新赋值会使得之前的对象析构掉 

3、union  还有大端小端的问题



union里面的成员共享内存
char数组的0位地址是int的地址向左对齐

union   T
{
        char  s[2];
        int  a;
};
int  main()
{
        T  t;
      t.a=0;
      t.s[0]=10;
      t.s[1]=1;
      printf(  "%d\n"  ,t.a);


        int  a=0;
        char  tmp=10;
      memcpy(&(a),&tmp,1);
      printf(  "%d\n"  ,a);


        int  tInt = (1<<8)+10;
      printf(  "%d\n"  ,tInt);
}

现在电脑基本是大端
【注】
大端 高位存在低地址 例如int 4字节  byte[0] byte[1] byte[2] byte[3] 地址递增 int 0x12 34 56 78 那么低地址byte[0]存整数的最高位0x12 byte[1]=0x34 byte[2]=0x56 byte[3]=0x78
小端相反

4、引用参数占不占空间???
void  test1( int  a  , int  c  )
{
      printf(  "%d\n"  ,& a  );
      printf(  "%d\n"  ,& c  );
}
void  test2( int  a  , int  &  b ,  int   c )
{
      printf(  "%d\n"  ,& a  );
        //printf("%d\n",&b);
      printf(  "%d\n"  ,& c  );
}
int  main()
{
        int  a=0;
      printf(  "test1:\n"  );
      test1(1,2);
      printf(  "test2:\n"  );
      test2(1,a,2);
}
由图得知占空间


5、虚指针存在哪里??
class   A
{
public  :
        virtual   void  test(){};
};
int  main()
{
        A  a1;
        A  a2;
      cout<<&a1<<endl;
      cout<<  sizeof  (a1)<<endl;
      cout<<&a2<<endl;
      cout<<  sizeof  (a2)<<endl;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值