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

2016-02-19 20:21 0 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++技术专题专题,
   或

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

延伸阅读
结构体和类有相同的特性,但又有很大的区别,类是构成面向对象编程的基础,但它是和结构体有着机器密切的关系。 我们在c语言中创建一个结构体我们使用如下方法: C++ 代码 //程序作者:管宁   //所有稿件均有版权,如要转载,请务必闻名出处和作者 strUCt test { priva...
标签: 电脑入门
在Windows通信端口初始化失败一般都有以下几种情况可以判断。情况如下: 1、在电脑开机之后,时间上需要六分钟左右才可以进入系统,或者更长。 2、在我们打开电脑之后,我们双击360图标的时候,电脑会提示Windows通信端口初始化失败 3、在输入命令中,输入netstat -an命令出现乱码。 4、如果是连接无线来上网的会发现无线上网也无法连接了...
C++类对象的拷贝构造函数 作者:韩耀旭 对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=100;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 #include <iostreamusing namespace std;class CA{public:CA(int b){a=b;}void Show (){c...
标签: Web开发
为什么要初始化CSS?在webjx.com前面的文章中,我们讲过CSS初始化是指重设浏览器的样式。不同的浏览器默认的样式可能不近相同,所有开发时的第一件事可能就是如果把他们统一。 也许他们平时做页面时根本就没考虑过浏览器兼容的问题。其实不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面差异。...
在学习这一章内容前我们已经学习过了类的构造函数和析构函数的相关知识,对于普通类型的对象来说,他们之间的复制是很简单的,例如: int a = 10; int b =a; !-- frame contents -- !-- /frame contents -- 自己定义的类的对象同样是对象,谁也不能阻止我们用以下的方式进行复制,例如:#include iostream&n...

经验教程

79

收藏

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