当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

初始化C++类成员和在你的MFC利用中加入位置栏[VC/C++编程]

赞助商链接



  本文“初始化C++类成员和在你的MFC利用中加入位置栏[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

问题 

我的问题是关于初始化C++类成员的.我见过很多这样的代码(包含在你的栏目中也见到过):

  CSomeClass::CSomeClass()
  {
  x=0;
  y=1;
  }

而在别的什么地方则写成下面的模样:

  CSomeClass::CSomeClass() : x(0), y(1)
  {
  }

我的一些程序员朋友说第二种办法对比好,但他们都不知道为什么是这样.你能奉告我这两种类成员初始化办法的辨别吗?

答复

从技术上说,你的程序员朋友是对的,但是在大大都情形下,二者实际上没有辨别.有两个缘由使得我们挑选第二种语法,它被称为成员初始化列表:一个缘由是必须的,另一个只是出于效率考虑.

让我们先看一下第一个缘由——必要性.假想你有一个类成员,它本身是一个类大概构造,并且只有一个带一个参数的构造函数.

  class CMember {
  public:
  CMember(int x) { ... }
  };

因为Cmember有一个显式声明的构造函数,编译器不产生一个缺省构造函数(不带参数),所以没有一个整数就无法成立Cmember的一个实例.

CMember* pm = new CMember;    // Error!!

CMember* pm = new CMember(2);   // OK

假如Cmember是另一个类的成员,你怎样初始化它呢?你必须利用成员初始化列表.

  class CMyClass {
  CMember m_member;
  public:
  CMyClass();
  };
  //必须利用成员初始化列表
  CMyClass::CMyClass() : m_member(2)
  {
  •••
  }

没有别的办法将参数传送给m_member,假如成员是一个常量对象大概引用也是一样.按照C++的法则,常量对象和引用不能被赋值,它们只能被初始化.


  以上是“初始化C++类成员和在你的MFC利用中加入位置栏[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 初始化C++类成员和在你的MFC利用中加入位置栏
  • <b>关于初始化C++类成员</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .