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

类成员的访问权限

  面向对象关键特性之一就是隐藏数据,采用机制就是设置类成员的访问控制权限。类成员有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. TSQL 字符串函数:截断和查找

    字符串截断函数是指:Stuff 和 SubString,字符串查找函数是:CharIndex 和 PatIndex 一,SubString 截取子串 最常用的字符串函数,用于截取特定长度的子串. SU ...

  2. Kafka 文档引言

    原文地址:https://kafka.apache.org/documentation.html#semantics 1.开始 1.1 引言 Kafka是一个分布式,分区队列,冗余备份的消息存储服务. ...

  3. (转)ubuntu apache2 的负载均衡和反向代理

    apache功能其实很是强大,最近一段时间研究了下apache的反向代理和负载均衡,反向代理网协的外网出口和我的博客出口就是通过apache的反向代理实现的,总结一下,重点说说负载均衡的配置. 首先说 ...

  4. 设计模式--观察者模式初探和java Observable模式

    初步认识观察者模式 观察者模式又称为发布/订阅(Publish/Subscribe)模式,因此我们可以用报纸期刊的订阅来形象的说明: 报社方负责出版报纸. 你订阅了该报社的报纸,那么只要报社发布了新报 ...

  5. 现代3D图形编程学习-基础简介(2) (译)

    本书系列 现代3D图形编程学习 基础简介(2) 图形和渲染 接下去的内容对渲染的过程进行粗略介绍.遇到的部分内容不是很明白也没有关系,在接下去的章节中,会被具体阐述. 你在电脑屏幕上看到的任何东西,包 ...

  6. docker进入后台运行的容器

    转载请注明出处   我们运行docker容器的时候,使用了-d参数,把容器在后台运行后. 这个时候,我们使用docker ps命令,我们就可以知道哪些程序在后台运行.   我们要怎么进入到docker ...

  7. python类的实例方法\静态方法\类方法区别解析(附代码)

    前言 搞了好久python,一直搞得不太清楚这几种类的方法,今天花时间好好测试一下,算是弄懂点皮毛吧. 三种方法的不同 先剽窃个图看一下 可以看到,实例是三种方法都可以调用的,而类只可以调用两种.所以 ...

  8. 利用javascript跨域访问cookie之广告推广

    在上一篇<说一说javascript跨域和jsonp>中,利用JSONP进行了跨域的数据访问,利用JS本身的跨域能力在远端生成HTML结构的方式完成了一个小广告. 在实际应用中, 跨域使用 ...

  9. C#获取硬盘序列号的问题求助

    具体问题是这样的:我用下面这段获取硬盘型信息的代码做成的exe文件,在机子上测试的时候,出现直接双击运行和用管理员身份运行结果不一样的情况,这个问题该怎么解决? public static Strin ...

  10. 有点激动,WPF换肤搞定了!

    一如既往没废话! wpf桌面应用开发都是window内引入很多个UserControl. 如果你有通过不同颜色来换肤的需求,那么下面我就将整个过程! 分2个步骤: 1.主窗体背景色替换: 2.同时界面 ...