在C++语言中,对象的类型被称为类,类代表了某一批对象的共性和特征。

  类是对象的抽象,而对象是类的具体实例。如同C中的结构体一样,我们要先定义一个结构体,再使用结构体去定义一个变量。同一个结构体可以定义出多个不同的结构体变量。我们要使用类也是如此。

  类是对象的模板,如同我们在建造房屋时候的图纸,然后我们就可以利用这个图纸去建造许多个房屋。我们可以使用别人已经定义好的类。更多的时候,我们要根据需要定义自己的类。

  定义类

  定义结构体的方法:

  struct Student

  {

  char name[128];

  int age;

  char add[128];

  };

  类的定义格式:

  class 类名

  {

  private : //成员访问限制符

  成员数据;

  成员函数;

  public : //public设置之前的成员都是上面所设置的私有的

  成员数据;

  成员函数;

  protected:

  成员数据;

  成员函数;

  };

  类也是一种数据类型,它是一种我们自己定义的广义的数据类型。

  private

  私有的,只能在类的内部访问,类的外部不能访问。

  protected

  受保护的,只能在类的内部访问,类的外部不能访问,还可以在它的派生类中访问,派生类后面会详细介绍。

  public

  公有的,类的外部和内部都可以访问。

  一个类可以包含多个成员访问限制符,每一个生效的范围直到下一个限制符被设置,如果没有被设置的话,默认为私有的。虽然同一个访问限制符可以出现多次,但是为了代码的简洁,我们应当让它们只出现一次。还有让public的成员放在类的声明前面。因为别人在观看你的代码的时候只会在意你的public成员,其它对外界隐藏的成员对于外界是没有意义的。

  C++中新增了类这个关键字,依然保留了结构,只是将结构进行了扩展,使它也可以定义成员函数。与类不同的是,结构中未声明访问限制的时候就会默认为公有的。

  如下面这个print()函数在结构体中就是公有的,如果在类中没有被声明访问限制就是私有的。

  定义对象

  class 类名 对象名;

  类名 对象名; //我们经常使用这种方法来创建一个对象

  类的成员函数

  类的成员函数也被称为类的方法,它也是函数的一种,它和基本的函数是一样的。它跟一般函数的区别只是它是一个类的成员,它是定义在类的内部的,同时它有访问控制符。

  私有的成员函数只能在本类中被调用,将需要被外界调用的成员声明为公有的,公有的成员函数就成了一个接口。如果我们只是希望一个函数在类的内部被其它函数所调用,我们就可以将它声明为私有的,因为这样的函数用来支持其它函数实现一些功能,我们称这样的函数为工具函数。

  我们也可以不用定义成员函数,但是这就体现不出类的作用,就相当于C的结构体了。

  下面我们通过一个实例来了解一下类的结构。

  在四号区域,我们创建了一个类的对象stu,并通过它调用了类的两个公共的方法,私有和保护的方法在外界是不能被调用的。在一号区域,我们完成了print()函数的声明和定义,但是getAge()函数仅仅只是声明了,我们在三号区域当中,也就是类的外部定义了它。当我们在类的外部定义成员函数的时候,我们要在函数名前面加上类名和作用域限制符,它表示这个成员函数是属于这个类的。二号区域中定义了一些私有的成员属性。在类的内部进行成员函数的声明,类的外部进行成员函数的定义,这是一个非常好的习惯。这样使类的长度更加短,结构层次更加清晰,便于我们阅读,而且有助于把类的声明和实现分离,从类的定义体中,用户只看到了类的原型,这对我们实现数据隐藏是有好处的。

  在类的内部进行声明和实现的时候,编译器自动的将这些函数定义为内联函数。如print()函数。在类之外定义的函数默认就不是内联函数,我们可以在定义函数的时候显式的加上inline关键字使它变成内联函数。如getAge()函数就可以在类外部定义的时候加上inline关键字声明使它变为内联函数。

原文链接:http://www.maiziedu.com/wiki/cplus/define/

C++中如何定义类和对象?的更多相关文章

  1. 如何在JavaScript中手动创建类数组对象

    前言 关于什么是js的类数组对象这里不再赘述.可以参考这个链接,还有这里. js中类数组对象很多,概念简单的讲就是看上去像数组,又不是数组,可以使用数字下标方式访问又没有数组方法. 例: argume ...

  2. 我所了解的关于JavaScript定义类和对象的几种方式

    原文:http://www.cnblogs.com/hongru/archive/2010/11/08/1871359.html 在说这个话题之前,我想先说几句题外话:最近偶然碰到有朋友问我“hois ...

  3. JavaScript定义类与对象的一些方法

    最近偶然碰到有朋友问我"hoisting"的问题.即在js里所有变量的声明都是置顶的,而赋值则是在之后发生的.可以看看这个例子: 1 var a = 'global'; 2 (fu ...

  4. javascript定义类或对象的方式

    本文介绍的几种定义类或对象的方式中,目前使用最广泛的是:混合的构造函数/原型方式.动态原型方式.不要单独使用经典的构造函数或原型方式. 工厂方式 构造器函数 原型方式 混合的构造函数/原型方式 动态原 ...

  5. 在 QML 中使用 C++ 类和对象

    Qt Quick 技术的引入,使得你能够快速构建 UI ,具有动画.各种绚丽效果的 UI 都不在话下.但它不是万能的,也有很多局限性,原来 Qt 的一些技术,比如低阶的网络编程如 QTcpSocket ...

  6. 优雅地创建未定义类PHP对象

    在PHP中,如果没有事先准备好类,需要创建一个未定义类的对象,我们可以采用下面三种方式: new stdClass() new class{} (object)[] 首先是stdClass,这个类是一 ...

  7. 危险代码:如何使用Unsafe操作内存中的Java类和对象

    危险代码:如何使用Unsafe操作内存中的Java类和对象—Part1 危险代码:如何使用Unsafe操作内存中的Java类和对象—Part2 危险代码:如何使用Unsafe操作内存中的Java类和对 ...

  8. java开发中的常见类和对象-建议阅读时间3分钟

    1.Dao 数据访问对象 此对象用于访问数据库.实现类一般用于用于操作数据库! 一般操作修改,添加,删除数据库操作的步骤很相似,就写了一个公共类DAO类 ,修改,添加,删除数据库操作时 直接调用公共类 ...

  9. 什么是“类数组对象”,在jquer中怎样将类数组对象转换为数组对象

    类数组对象的定义: 所谓"类数组对象"就是一个常规的Object对象,如$("div")但它和数组对象非常相似:具备length属性, 并以0.1.2.3……等 ...

随机推荐

  1. Python 6 —— 异常

    Python 6 —— 异常 异常分类 AttributeError:调用不存在的方法 EOFError:遇到文件末尾引发异常 ImportError:导入模块引发异常 IndexError:列表越界 ...

  2. 模板短信接口调用java,pythoy版(二) 阿里大于

    说明 功能:短信通知发送 + 短信发送记录查询,所有参数我没有改动,实测有效! 请自行参考 + 官方API! 短信模板示例:尊敬的${name},您的快递已在飞奔的路上,将在今天${time}送达您的 ...

  3. 【MySQL】MySQL中where条件的执行分析

    1.问题描述 一条SQL,在数据库中是如何执行的呢?相信很多人都会对这个问题比较感兴趣.当然,要完整描述一条SQL在数据库中的生命周期,这是一个非常巨大的问题,涵盖了SQL的词法解析.语法解析.权限检 ...

  4. SAS 画折线图PROC GPLOT

    虽然最后做成PPT里的图表会被要求用EXCEL画,但当我们只是在分析的过程中,想看看数据的走势,直接在SAS里画会比EXCEL画便捷的多. 修改起来也会更加的简单,,不用不断的修改程序然后刷新EXCE ...

  5. CSDDN特约专稿:个性化推荐技术漫谈

    本文引自http://i.cnblogs.com/EditPosts.aspx?opt=1 如果说过去的十年是搜索技术大行其道的十年,那么个性化推荐技术将成为未来十年中最重要的革新之一.目前几乎所有大 ...

  6. cobbler 配置(转载)

    Cobbler介绍 Cobbler 是一个系统启动服务(boot server),可以通过网络启动(PXE)的方式用来快速安装.重装物理服务器和虚拟机,支持安装不同的 Linux 发行版和 Windo ...

  7. window下安装wamp环境

    Wamp就是Windos Apache Mysql PHP集成安装环境,即在window下的apache.php和mysql的服务器软件.其中php环境配置是至关重要的一部分,本文就针对php在本地的 ...

  8. Version history of VC++, MFC and ATL

    I have tried to assemble together information about the Visual C++ releases, the compiler and the fr ...

  9. 黑马程序员——HTML表格布局

    ---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net ...

  10. ORACLE 自定义分页存储过程

    一.创建包 CREATE OR REPLACE PACKAGE PKG_JK_LAB_BASIC IS TYPE CURSOR_TYPE IS REF CURSOR; PROCEDURE SP_GET ...