C++基础:初始化类对象

2016-02-19 20:21 2 1 收藏

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享C++基础:初始化类对象吧。

【 tulaoshi.com - 编程语言 】

问题:
         C++中如何初始化类中的表数据?在C语言中,我能像下面这样初始化结构数组: 
  

  
  //
  strUCt MYSTRUCT {
      int x,y,z;
  };MYSTRUCT table[] = {
      { 1,2,3 },
      { 4,5,6 },
      ... // etc
  };
  //
  
   
  但是假如MYSTRUCT是个C++类,而不是结构,我编译就会出错。我觉得这是C++的一个不足。 解答:
  
      这个问题完全取决于你如何看待C++。C++的一个优点之一便是它强制你做正确的事情。例如,C++不喜欢创建对象时不调用构造函数。这只就是为什么你不能用原始数据初始化类对象的原因,不管是部分数组还是其它数据。   构造函数的目的是保证每一个对象都被正确初始化,不管你是从程序栈,可用内存堆分配空间,还是作为静态数组元素。让原始数据旁路掉构造函数被忌讳的事情。也导致你不能用初始的数据来创建对象静态数组——你必须调用构造函数!
  //
  class CFooble {
      int x,y,z;
  public:
      CFooble(int xx, int yy, int zz)
          : x(xx),y(yy),z(zz) { ... }
      CFooble(int i) { x=y=z=i; }
  };
  CFooble table[] = {
      CFooble(1,2,3),
      CFooble(4,5,6),
      CFooble(0),    // can use any constructor!
  };
  //
  
   
  下面的代码是个可以编译的完整例子。
  //
  // StaticClassArray — 说明如何初始化在C++对象的静态C数组
  // 编译方法如下:
  //
  //    cl fooble.cpp
  //
  #include stdio.h
  
  
  

   更多内容请看C/C++技术专题专题,或
  //////////////////
  // 一个典型的类——有三个数据成员...
  //
  class CFooble {
  protected:
     int x,y,z;public:
     // 两个构造函数...
     CFooble(int i) { x=y=z=i; }
     CFooble(int xx, int yy, int zz) : x(xx),y(yy),z(zz) { }   // 一个输出函数
     void print() {
        printf("CFooble at %p: (%d,%d,%d)", this, x, y, z);
     }   // 这个函数检查是否为空...
     int IsEmpty() {
        return x==0 && y==0 && z==0;
     }
  };#ifdef NEVER
  // 如下这样将不能运行—不能“生硬”地进行C++类对象的初始化!
  CFooble table[] = {
     { 1,2,3 },
     { 4,5,6 },
     { 0,0,0 }
  };
  #endif// 以下是如何初始化一个类数组:
  CFooble table[] = {
     CFooble(1,2,3),
     CFooble(4,5,6),
     CFooble(0), // 甚至可以是用不同的构造器!
  };void main()
  {
     for (CFooble* pc=table; !pc-IsEmpty(); pc++) {
        pc-print();
     }
  }
  //
   
      在C++中,你能用用任何构造函数初始化数组元素,并且C++甚至用缺省的构造函数来初始化额外的元素,而不用外部的初始华例程。对我来说,这是一种进步,而不是不足。
  
  
  
  

   更多内容请看C/C++技术专题专题,
   或

来源:http://www.tulaoshi.com/n/20160219/1623436.html

延伸阅读
标签: Web开发
为什么要初始化CSS?在webjx.com前面的文章中,我们讲过CSS初始化是指重设浏览器的样式。不同的浏览器默认的样式可能不近相同,所有开发时的第一件事可能就是如果把他们统一。 也许他们平时做页面时根本就没考虑过浏览器兼容的问题。其实不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面差异。...
上两篇内容我们着重说了结构体相关知识的操作。 以后的内容我们将逐步完全以c++作为主体了,这也意味着我们的教程正式进入面向对象的编程了。 !-- frame contents -- !-- /frame contents -- 前面的教程我已经再三说明,结构体的把握非常重要,重要在哪里呢?重要在结构体和类有相同的特性,但又...
结构体和类有相同的特性,但又有很大的区别,类是构成面向对象编程的基础,但它是和结构体有着机器密切的关系。 我们在c语言中创建一个结构体我们使用如下方法: C++ 代码 //程序作者:管宁   //所有稿件均有版权,如要转载,请务必闻名出处和作者 strUCt test { priva...
C++类对象的拷贝构造函数 作者:韩耀旭 对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=100;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 #include <iostreamusing namespace std;class CA{public:CA(int b){a=b;}void Show (){c...
ALTER DATABASE DATAFILEd:\ORANT\DATABASE\USER1ORCL.ORA RESIZE 1000M; CREATE TABLESPACE INDEX_DATA DATAFILEd:\ORANT\DATABASE\INDEX_DATA SIZE 500M; ALTER DATABASE DATAFILEd:\ORANT\DATABASE\RBS1ORCL.ORA RESIZE 300M; ALTER DATABASE DATAFILEd:\ORANT\DASTABASE\TMP1ORCL.ORA RESIZE 300M; alter rollback segment "RB1" offlin...

经验教程

840

收藏

83
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部