当前位置:  编程语言>c/c++

c++类对象初始化方式

 
    发布时间:2013-9-9  


    本文导语: 一、类和对象的关系 每一个实体都是对象。有一些对象是具有相同的结构和特性的。每个对象都属于一个特定的类型。在C++中对象的类型称为类(class )。类代表了某一批对象的共性和特征。类是对象的抽象,而对象是...

一、对象的关系

   每一个实体都是对象。有一些对象是具有相同的结构和特性的。每个对象都属于一个特定的类型。在c++中对象的类型称为类(class )。类代表了某一批对象的共性和特征。类是对象的抽象,而对象是类的具体实例(instance)。

   正如同结构体类型和结构体变量的关系一样,人们先声明一个结构体类型,然后用它去定义结构体变量。同一个结构体类型可以定义出多个不同的结构体变量。

  在C++中也是先声明一个类类型,然后用它去定义若干个同类型的对象。对象就是类类型的一个变量。可以说类是对象的模板,是用来定义对象的一种抽象类型。类是抽象的,不占用内存,而对象是具体的,占用存储空间。

二、定义对象的方法

1.先声明类类型,然后再定义对象前面用的就是这种方法,如Student stud1,stud2;//Student是已经声明的类类型在C++中,声明了类类型后,定义对象有两种形式。

(1)class 类名 对象名

 

class Student stud1,stud2;

把class和Student合起来作为一个类名,用来定义对象。

(2)类名 对象名

 

Student stud1,stud2;

直接用类名定义对象。

这两种方法是等效的。第1种方法是从C语言继承下来的,第2种方法是C++的特色,显然第2种方法更为简捷方便。

2.在声明类类型的同时定义对象

class Student//声明类类型
{
   public ://先声明公用部分
   void display( )
    {
       cout<<″num:″<<num<<endl;
       cout<<″name:″<<name<<endl;
       cout<<″sex:″<<sex<<endl;}
       private ://后声明私有部分
      int num;
       char name[20];
       char sex;
    }stud1,stud2;//定义了两个Student类的对象
}

在定义Student类的同时,定义了两个Student 类的对象。

不出现类名,直接定义对象

class //无类名
{
   private : //声明以下部分为私有的   
   ┆
    public : //声明以下部分为公用的
   ┆
 }stud1,stud2;//定义了两个无类名的类对象

  直接定义对象,在C++中是合法的、允许的,但却很少用,也不提倡用。在实际的程序开发中,一般都采用上面3种方法中的第1种方法。在小型程序中或所声明的类只用于本程序时,也可以用第2种方法。在定义一个对象时,编译系统会为这个对象分配存储空间,以存放对象中的成员。

三.代码举例(构造对象数组并传递构造参数):

// 一个典型的类——有三个数据成员...
//
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();
   }
}


  • 本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载,整理或搜集自网络.欢迎任何形式的转载,转载请注明出处.
    转载请注明:文章转载自:[169IT-IT技术资讯]
    本文标题:c++类对象初始化方式
相关文章推荐:
  • Python namedtuple对象json序列化/反序列化及对象恢复
  • jquery对象和javascript对象即DOM对象相互转换
  • c#对象中两种copy操作:深拷贝(Deep Copy)与浅拷贝(Shallow Copy)
  • 请问如何把StringBuffer 的对象转化成一个InputStream 的对象,或者InputStream 子类的对象也可以!
  • php中检测变量是否是一个对象的is_object函数介绍及用法举例
  • 判断一个对象是否为jquery对象的方法
  • java tomcat实现Session对象的持久化原理及配置方法介绍
  • Glib对象系统(也称为"GObject")内部是如何实现面向对象特征的呢?
  • 将ResultSet结果集中的记录映射到Map对象中
  • 用RMI进行远程对象调用的时候,可不可以实现多个调用远程对象的并发操作
  • php 5.5.14数据对象(PDO)介绍及PDO的预定义常量介绍
  • 你们看是不是可以这样理解:在用来进行两个对象的比较时,==操作符用来比较两个对象的引用地址,而equals()用来比较两个对象的值。
  • 请问:能不能动态的运行时生成对象(动态定义对象), 要涉及到哪些技术, 反射,序列化...??
  • 重新编译PLSQL中的无效对象或者指定的对象 的方法
  • jquey笔记之dom对象与jquery对象互换的例子
  • 有人问我:何为面向对象编程?我给不出确切或形象的说法。谢!vb、pb等开发工具是不是面向对象编程的语言。
  • 写一个方法,向它传递一个对象,循环打印出对象层次结构中的所有类?thinking in java里面的一个习题不知道如何做请教高手?
  • “当某个实例不再被任何对象引用时就会被垃圾回收机制回收”,那么怎样才算是不被任何对象引用呢?
  • 我的APPLET在Jbuilder5中,可以调用EJB对象,但是移植到网页上却不能调用EJB对象!是何缘故,值得研究!
  • 扩展企业对象框架 XEO iis7站长之家
  • 1. 请问linux下可以使用“typedef list<对象*> 对象列表名 ”和iterator吗?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3