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

周菊香姐

周菊香姐

2016-02-19 20:21

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享C++基础:初始化类对象吧。
问题:
         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++技术专题专题,
   或
展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
C++基础:初始化类对象

初始化类对象

C语言教程 C语言函数
初始化类对象

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

关于初始化C++类成员

编程语言 网络编程
关于初始化C++类成员

Java对象初始化顺序的使用

编程语言 网络编程
Java对象初始化顺序的使用

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Java数组声明、创建、初始化基础

编程语言 网络编程
Java数组声明、创建、初始化基础

C# 3.0新特征之创建和初始化集合对象

编程语言 网络编程
C# 3.0新特征之创建和初始化集合对象

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

C语言中的面向对象(1)-类模拟和多态,继承

C语言中的面向对象(1)-类模拟和多态,继承

对C++递增(增量)运算符重载的思考

对C++递增(增量)运算符重载的思考
下拉加载更多内容 ↓