C/C++日常学习总结(第二篇)结构体和类的大小及区别&为什么是new一个对象而不是malloc

1.大家在定义一个动态类对象时,使用的都是new,而不用malloc,为什么?

  【解析】:

    malloc,free无法满足动态对象的要求,他们不能像new,delete和new,delete[]自动调用对象的构造函数和析构函数.

 

2.结构体和类的区别?

【解析】:

(1.)class的默认成员变量是私有的private,struct默认是公有的public

(2.)class 有成员函数,struct没有成员函数

(3.)他们各自对象的大小sizeof(class/struct),他们都遵循下面三条原则:

                 1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;

                 2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);

                 3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)。

             But:1)类中成员变量是引用&时,会把他么当成指针处理,比如:double &m_db;此时占据的大小为4

               2)static成员变量,占据的公共空间,对单个对象大小没有影响,大小为0

 

3.什么情况下显示定义复制构造函数?

【解析】:

             如果类中含有指针型的数据成员、需要使用动态内存,程序员最好显式定义自己的复制构造函数,避免各种可能出现的内存错误。

            computer(const computer &cp) //自定义复制构造函数
            {
                  //重新为brand开辟和cp.brand同等大小的动态内存
                 brand = new char[strlen(cp.brand) + 1];
                 strcpy(brand, cp.brand); //字符串复制
                price = cp.price;
             }

4.初始化列表中的顺序要和变量声明的顺序一致?

 【解析】:

   class CTotal

  {

  private:

             int m_iy;

             int m_ix;

  public:

      CTotal(int x=0):m_ix(x),m_iy(m_ix)

     {}

 };定义一个对象CTotal  tol(1);打印出两个变量的值,就会发现m_iy=无穷大,m_ix=1,因为传给m_iy时m_ix还没有值。

 

 

【纠正:】上一篇中const对象除了可以访问const成员函数,也可以访问非const析构函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值