Vb教程 Vb.net教程 Vfp教程 C/C++教程 Vc/Vc++教程 Delphi教程 Java教程 Powerbuilder
  杀毒频道 | 短信频道 | 网络电视 | 论文中心 | 学上网 | 学软件 | 网页特效 | 电脑基础 | 论坛  
  NCRE | 软考 | CET | 职称英语 | 司法考试 | 报关员 | 公务员 | CATTI | CPA考试  
  Html教程 | Css教程 | Xml教程 | Asp教程 | Asp.net | Php教程 | Jsp教程 | Linux教程 | QQ技巧  
Photoshop Illustrator ImageReady Maya教程 3D Max教程 Lightscape Coredraw教程 Authorware Autocad教程 Freehand教程
Access教程 Mysql教程 Sql server Oracle教程 Word教程 Excel教程 Powerpoint Frontpage Asp.net源码 Php源代码
Flash教程 Fireworks Dreamweaver C#教程 outlook教程 系统安装 vbscript教程 Javascript Jsp源代码 Asp源代码
您的位置:首页 >> C/C++教程 >> 正文

C++基础:初始化类对象
文章来源:csdn 作者:赵湘宁

问题:
       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>


//////////////////
// 一个典型的类——有三个数据成员...
//
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)\n", 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++甚至用缺省的构造函数来初始化额外的元素,而不用外部的初始华例程。对我来说,这是一种进步,而不是不足。

[返回]

编程语言 web开发 数据库 网络技术 操作系统 服务器 网页设计 图形设计 办公软件 常用软件 学电脑

Copyright© www.bianceng.cn Powered by 编程入门网 All Rights Reserved.
关于本站 | 版权声明 | 联系我们 | 友情链接 |
编程入门网 版权所有