类是一种抽象和封装机制,描述一组具有相同属性和行为的对象,是代码复用的基本单位。

类成员的访问权限

  面向对象关键特性之一就是隐藏数据,采用机制就是设置类成员的访问控制权限。类成员有3种访问权限:

  • 公有类型:由关键字public声明,在类外只能访问公有成员。
  • 私有类型:由关键字private声明,私有成员只能被类本身的成员函数访问。
  • 保护类型:由protect声明,与私有成员类似,区别仅在于继承过程中,保护类型的成员可以被所在类的派生类成员函数访问。

  此处注意区分类的成员函数和类对象。

  一般来说,公有成员是类的对外表现,而私有成员是类的内部实现,不希望外界了解。

成员函数的实现

  类的数据成员说明了对象的特征,而类的成员函数决定对象的操作行为。成员函数是算法的实现部分,是对封装的数据进行操作的唯一途径。其实现方式可分为类内实现和类外实现。类外实现形式如下:

  返回值类型 类名::成员函数名(形式参数表)  {    函数体;  }

类对象

  对象是类的实例,系统不会为抽象的类分配存储空间,但却要为对象分配相应的内存空间。但这个内存空间只能用于存放对象的数据成员,其成员函数不在每个对象中的存储副本。

构造函数

  对象的创建比普通变量的创建复杂,它需要在分配内存空间的同时将数据成员的初始值一并写入。构造函数的作用是在对象被创建时利用特定的值构造对象。

  声明一个构造函数的语法格式如下:

    public:      类名(<参数表>);

  构造函数是类的一个特殊成员函数,它的函数名与类名相同,可以有任意类型的参数,但不能有返回类型。当创建一个新对象时,编译器会自动调用构造函数。构造函数可以自己编写提供;如果不提供,编译器会自动生成一个不带参数的默认构造函数(不做任何具体工作)。

重载构造函数:

  所谓重载构造函数,是指同一个构造函数名,其参数表不同。注意:当构造函数带默认参数时,要避免出现歧义。

拷贝构造函数:

  拷贝构造函数就是用来复制对象的一种特殊的构造函数。通过它,可以使用一个已经创建好的对象(由拷贝构造函数的参数指定)去初始化一个正在创建的同类对象。

  声明拷贝构造函数的语法格式如下:

    class 类名    {    public:      类名(类名 & 对象名);    };

  拷贝构造函数只能有一个参数,而且是对某个同类对象的引用。每个类都必须有一个拷贝构造函数,如果该函数的功能仅仅是将已创建对象数据成员的值赋给正在创建对象的数据成员,那么没有必要显示定义它,而由编译器自动生成一个具有上述形式的默认拷贝狗仔函数。

析构函数

  析构函数与构造函数的作用几乎相反,当一个对象消失时,或用delete删除用new创建的对象时,系统都会自动调用类的析构函数做一些清理工作。它调用完成后,对象就消失了,其相应的内存空间也就被释放了。

  声明一个析构函数的语法格式如下:

    class Demo    {    public:      Demo(<参数表>);      ~Demo(void);    }

  析构函数的函数名与类名相同,只是在前面加上一个"~"。它没有参数和返回值,但可以是虚函数。由于一个类只能定义一个析构函数,所以析构函数不能重载。析构函数调用顺序是最后创建的对象最先消亡。

【C++】类和对象(构造与析构)的更多相关文章

  1. C++ 类成员的构造和析构顺序

    我想对面向对象有了解的童鞋应该不会对类和对象感到陌生吧 ! 对象并不是突然建立起来的,创建对象必须时必须同时创建父类以及包含于其中的对象.C++遵循如下的创建顺序: (1)如果某个类具体基类,执行基类 ...

  2. C++复习:类和对象

    类和对象 基本概念 1)类.对象.成员变量.成员函数 2)面向对象三大概念 封装.继承.多态 3)编程实践     类的定义和对象的定义,对象的使用     求圆形的面积     定义Teacher类 ...

  3. C++浅析——继承类中构造和析构顺序

    先看测试代码,CTEST 继承自CBase,并包含一个CMember成员对象: static int nIndex = 1; class CMember { public: CMember() { p ...

  4. C++ 类 、构造、 析构、 重载 、单例模式 学习笔记及练习

    一.拷贝构造函数 1.是一种特殊的构造函数,就是用一个已有的对象去构造其同类的副本对象,即对象克隆. class 类名 { 类名(类名& that) { 对类成员挨个赋值 ... } } 练习 ...

  5. C++解析(12):初始化列表与对象构造顺序、析构顺序

    0.目录 1.类成员的初始化 2.类中的const成员 3.对象的构造顺序 3.1 局部对象的构造顺序 3.2 堆对象的构造顺序 3.3 全局对象的构造顺序 4.对象的析构顺序 5.小结 1.类成员的 ...

  6. C++ 类的继承三(继承中的构造与析构)

    //继承中的构造与析构 #include<iostream> using namespace std; /* 继承中的构造析构调用原则 1.子类对象在创建时会首先调用父类的构造函数 2.父 ...

  7. C++面试常见问题——10派生类的构造与析构

    派生类的构造与析构 派生类的构造 派生时构造函数与析构函数不会被继承,需要重新定义派生类的构造函数与析构函数.派生类对象包含了基类对象的值,创建派生类时首先会调用基类的构造函数,若派生类中含有其它类对 ...

  8. 《Effective C++》阅读总结(二):类的构造、析构和赋值

    今天是周六早上,但很不幸待会儿还是要去公司,本月kpi还剩一些工作要做,这个月计划的Effective C++学习,也基本完成了,最后一章节模板相关那部分还看不太懂,就大概过了一遍.现在是收尾总结阶段 ...

  9. Java内存结构、类的初始化、及对象构造过程

    概述 网上关于该题目的文章已经很多,我觉得把它们几个关联起来讲可能更好理解一下.与其它语言一样,它在执行我们写的程序前要先分配内存空间,以便于存放代码.数据:程序的执行过程其实依然是代码的执行及数据的 ...

  10. C++不能中断构造函数来拒绝产生对象(在构造和析构中抛出异常)

    这是我的感觉,具体需要研究一下- 找到一篇文章:在构造和析构中抛出异常 测试验证在类构造和析构中抛出异常, 是否会调用该类析构. 如果在一个类成员函数中抛异常, 可以进入该类的析构函数. /// @f ...

随机推荐

  1. 了解HTML表单之form元素

    前面的话 表单是网页与用户的交互工具,由一个<form>元素作为容器构成,封装其他任何数量的表单控件,还有其他任何<body>元素里可用的标签 表单能够包含<input& ...

  2. JS / Egret 单笔手写识别、手势识别

    UnistrokeRecognizer 单笔手写识别.手势识别 UnistrokeRecognizer : https://github.com/RichLiu1023/UnistrokeRecogn ...

  3. spring boot(四):thymeleaf使用详解

    在上篇文章springboot(二):web综合开发中简单介绍了一下thymeleaf,这篇文章将更加全面详细的介绍thymeleaf的使用.thymeleaf 是新一代的模板引擎,在spring4. ...

  4. php内核分析(五)-zval

    这里阅读的php版本为PHP-7.1.0 RC3,阅读代码的平台为linux 实际上,从这个函数开始,就已经进入到了zend引擎的范围了. zend_eval_string_ex(exec_direc ...

  5. 利用fis3自动化处理asp.net项目静态资源时遇到的一个编码问题

    fis3是一款强大的前端自动化构建工具,提供了很多非常实用的功能,具体参考http://fis.baidu.com/,使用该工具需要安装node环境. 最近在部署网站的时候尝试了一下使用该工具对前端资 ...

  6. Rafy 框架 - 为数据库生成注释

    当开发者使用 CodeFirst 开发模式,编写了大量的实体类,在代码中编写了完整的类型注释和属性注释,并自动生成数据库后,往往需要把实体类型和实体属性上的注释同时生成到对应的数据库表及字段上.这样, ...

  7. spring mvc 和spring security配置 web.xml设置

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmln ...

  8. DevOps的基本原则与介绍

    DevOps的基本原则与介绍       DevOps这个术语是developer与operations的合并简写.实现还有QA.DevOps描述与精简软件交付流程,在今天已经开始广泛的使用.强调从生 ...

  9. [连载]《C#通讯(串口和网络)框架的设计与实现》- 8.总体控制器的设计

    目       录 第八章           总体控制器的设计... 2 8.1           总控制器的职能... 2 8.2           组装和释放部件... 3 8.3      ...

  10. quartz定时+log4net日志+exchangeservice发邮件

    main using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sys ...