【C++】类和对象(构造与析构)
类
类是一种抽象和封装机制,描述一组具有相同属性和行为的对象,是代码复用的基本单位。
类成员的访问权限
面向对象关键特性之一就是隐藏数据,采用机制就是设置类成员的访问控制权限。类成员有3种访问权限:
- 公有类型:由关键字public声明,在类外只能访问公有成员。
- 私有类型:由关键字private声明,私有成员只能被类本身的成员函数访问。
- 保护类型:由protect声明,与私有成员类似,区别仅在于继承过程中,保护类型的成员可以被所在类的派生类成员函数访问。
此处注意区分类的成员函数和类对象。
一般来说,公有成员是类的对外表现,而私有成员是类的内部实现,不希望外界了解。
成员函数的实现
类的数据成员说明了对象的特征,而类的成员函数决定对象的操作行为。成员函数是算法的实现部分,是对封装的数据进行操作的唯一途径。其实现方式可分为类内实现和类外实现。类外实现形式如下:
返回值类型 类名::成员函数名(形式参数表) { 函数体; }
类对象
对象是类的实例,系统不会为抽象的类分配存储空间,但却要为对象分配相应的内存空间。但这个内存空间只能用于存放对象的数据成员,其成员函数不在每个对象中的存储副本。
构造函数
对象的创建比普通变量的创建复杂,它需要在分配内存空间的同时将数据成员的初始值一并写入。构造函数的作用是在对象被创建时利用特定的值构造对象。
声明一个构造函数的语法格式如下:
public: 类名(<参数表>);
构造函数是类的一个特殊成员函数,它的函数名与类名相同,可以有任意类型的参数,但不能有返回类型。当创建一个新对象时,编译器会自动调用构造函数。构造函数可以自己编写提供;如果不提供,编译器会自动生成一个不带参数的默认构造函数(不做任何具体工作)。
重载构造函数:
所谓重载构造函数,是指同一个构造函数名,其参数表不同。注意:当构造函数带默认参数时,要避免出现歧义。
拷贝构造函数:
拷贝构造函数就是用来复制对象的一种特殊的构造函数。通过它,可以使用一个已经创建好的对象(由拷贝构造函数的参数指定)去初始化一个正在创建的同类对象。
声明拷贝构造函数的语法格式如下:
class 类名 { public: 类名(类名 & 对象名); };
拷贝构造函数只能有一个参数,而且是对某个同类对象的引用。每个类都必须有一个拷贝构造函数,如果该函数的功能仅仅是将已创建对象数据成员的值赋给正在创建对象的数据成员,那么没有必要显示定义它,而由编译器自动生成一个具有上述形式的默认拷贝狗仔函数。
析构函数
析构函数与构造函数的作用几乎相反,当一个对象消失时,或用delete删除用new创建的对象时,系统都会自动调用类的析构函数做一些清理工作。它调用完成后,对象就消失了,其相应的内存空间也就被释放了。
声明一个析构函数的语法格式如下:
class Demo { public: Demo(<参数表>); ~Demo(void); }
析构函数的函数名与类名相同,只是在前面加上一个"~"。它没有参数和返回值,但可以是虚函数。由于一个类只能定义一个析构函数,所以析构函数不能重载。析构函数调用顺序是最后创建的对象最先消亡。
【C++】类和对象(构造与析构)的更多相关文章
- C++ 类成员的构造和析构顺序
我想对面向对象有了解的童鞋应该不会对类和对象感到陌生吧 ! 对象并不是突然建立起来的,创建对象必须时必须同时创建父类以及包含于其中的对象.C++遵循如下的创建顺序: (1)如果某个类具体基类,执行基类 ...
- C++复习:类和对象
类和对象 基本概念 1)类.对象.成员变量.成员函数 2)面向对象三大概念 封装.继承.多态 3)编程实践 类的定义和对象的定义,对象的使用 求圆形的面积 定义Teacher类 ...
- C++浅析——继承类中构造和析构顺序
先看测试代码,CTEST 继承自CBase,并包含一个CMember成员对象: static int nIndex = 1; class CMember { public: CMember() { p ...
- C++ 类 、构造、 析构、 重载 、单例模式 学习笔记及练习
一.拷贝构造函数 1.是一种特殊的构造函数,就是用一个已有的对象去构造其同类的副本对象,即对象克隆. class 类名 { 类名(类名& that) { 对类成员挨个赋值 ... } } 练习 ...
- C++解析(12):初始化列表与对象构造顺序、析构顺序
0.目录 1.类成员的初始化 2.类中的const成员 3.对象的构造顺序 3.1 局部对象的构造顺序 3.2 堆对象的构造顺序 3.3 全局对象的构造顺序 4.对象的析构顺序 5.小结 1.类成员的 ...
- C++ 类的继承三(继承中的构造与析构)
//继承中的构造与析构 #include<iostream> using namespace std; /* 继承中的构造析构调用原则 1.子类对象在创建时会首先调用父类的构造函数 2.父 ...
- C++面试常见问题——10派生类的构造与析构
派生类的构造与析构 派生类的构造 派生时构造函数与析构函数不会被继承,需要重新定义派生类的构造函数与析构函数.派生类对象包含了基类对象的值,创建派生类时首先会调用基类的构造函数,若派生类中含有其它类对 ...
- 《Effective C++》阅读总结(二):类的构造、析构和赋值
今天是周六早上,但很不幸待会儿还是要去公司,本月kpi还剩一些工作要做,这个月计划的Effective C++学习,也基本完成了,最后一章节模板相关那部分还看不太懂,就大概过了一遍.现在是收尾总结阶段 ...
- Java内存结构、类的初始化、及对象构造过程
概述 网上关于该题目的文章已经很多,我觉得把它们几个关联起来讲可能更好理解一下.与其它语言一样,它在执行我们写的程序前要先分配内存空间,以便于存放代码.数据:程序的执行过程其实依然是代码的执行及数据的 ...
- C++不能中断构造函数来拒绝产生对象(在构造和析构中抛出异常)
这是我的感觉,具体需要研究一下- 找到一篇文章:在构造和析构中抛出异常 测试验证在类构造和析构中抛出异常, 是否会调用该类析构. 如果在一个类成员函数中抛异常, 可以进入该类的析构函数. /// @f ...
随机推荐
- 使用注解匹配Spring Aop切点表达式
Spring中的类基本都会标注解,所以使用注解匹配切点可以满足绝大部分需求 主要使用@within()/@target @annotaton() @args()等... 匹配@Service类中的所有 ...
- salesforce 零基础学习(六十一)apex:component简单使用以及图片轮转播放的实现
有的时候,我们项目有可能有类似需求:做一个简单的图像轮转播放功能,不同的VF页面调用可以显示不同的图片以及不同的图片描述.这种情况,如果在每个页面单独处理相关的图像轮转播放则显得代码特别冗余,此种情况 ...
- WCF学习之旅—实现REST服务(二十二)
一.什么是REST 表述性状态转移(Representational State Transfer,REST),不是一种标准,而是一种软件架构风格. 基于REST的服务与基于SOAP的服务相比,性能. ...
- SQL 邮件配置篇
在我们运维工作中,经常要对备份,ETL等作业进行监控,这时我们需要用到SQL SERVER自带的邮件服务器,其原理,我在这么里不多说,直接来实战,下面是我对服务器配置源码,分享给大家,希望对大家有帮助 ...
- Javascript 中 with 的替代方案和String 中的正则方法
这几天在升级自己的MVVM 框架,遇到很多小问题,就在这里统一解决了. with 语法 在代码中,要执行这么一个函数 function computeExpression(exp, scope) { ...
- 安卓Design包之超强控件CoordinatorLayout与SnackBar的简单使用
在前面的Design中,学习使用了TabLayout,NavigationView与DrawerLayout实现的神奇效果,今天就带来本次Design包中我认为最有意义的控件CoordinatorLa ...
- 匹夫细说C#:委托的简化语法,聊聊匿名方法和闭包
0x00 前言 通过上一篇博客<匹夫细说C#:庖丁解牛聊委托,那些编译器藏的和U3D给的>的内容,我们实现了使用委托来构建我们自己的消息系统的过程.但是在日常的开发中,仍然有很多开发者因为 ...
- 网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(2): 抓取allitebooks.com书籍信息及ISBN码
这一篇首先从allitebooks.com里抓取书籍列表的书籍信息和每本书对应的ISBN码. 一.分析需求和网站结构 allitebooks.com这个网站的结构很简单,分页+书籍列表+书籍详情页. ...
- 使用CoreProfiler/NanoProfiler实现跨平台&应用的整合性能调试
摘要 NanoProfiler是一个开源.NET性能调试类库,CoreProfiler是其.NET Core版本的实现.在之前的一些文章中,我曾介绍过NanoProfiler的主要使用方式,以及如何为 ...
- jQuery+CSS3文字跑马灯特效
jQuery+CSS3文字跑马灯特效是一款将跑马灯背景制作为3D立方体效果,文字在上面移动时,就像是文字投影到墙壁上,在转角出会改变运动方向. 效果展示 http://hovertree.com/te ...