【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 ...
随机推荐
- Android笔记——Application的作用
一.Application是什么 Application和Actovotu,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象, ...
- Android 浏览器 —— 使用 WebView 实现文件下载
对当前的WebView设置下载监听 mCurrentWebView.setDownloadListener(new DownloadListener() { @Override public void ...
- 详细解说 STL 排序(Sort)
0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(60)-系统总结
系列目录 前言: 起初写这个框架的时候,可以说在当时来说并不是很流行的设计模式,那是在2012年,面向对象的编程大家都很熟悉, 但是“注入.控制反转(DI,IOC,依赖注入).AOP切面编程”新兴名词 ...
- 计算机程序的思维逻辑 (38) - 剖析ArrayList
从本节开始,我们探讨Java中的容器类,所谓容器,顾名思义就是容纳其他数据的,计算机课程中有一门课叫数据结构,可以粗略对应于Java中的容器类,我们不会介绍所有数据结构的内容,但会介绍Java中的主要 ...
- Hadoop的学习--安装配置与使用
安装配置 系统:Ubuntu14.04 java:1.7.0_75 相关资料 官网 下载地址 官网文档 安装 我们需要关闭掉防火墙,命令如下: sudo ufw disable 下载2.6.5的版本, ...
- 30分钟学会XAML
1.狂妄的WPF 相对传统的Windows图形编程,需要做很多复杂的工作,引用许多不同的API.例如:WinForm(带控件表单).GDI+(2D图形).DirectX API(3D图形)以及流媒体和 ...
- springboot(八):RabbitMQ详解
RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用. 消息中间件在互联网公司的使用中越来越多,刚才还看到新闻阿里将RocketMQ捐献给了apa ...
- C#基础知识八之访问修饰符
1. 类的访问修饰符 修饰符 访问权限 无或者internal 只能在同一个程序集中访问类 public 同一个程序集或引用该程序集的外部都可访问类 abstract或internal abstra ...
- 浅谈JDBC访问MySQL数据库
经过我自己的总结后,其实很简单,只需要记住四个步骤,JDBC这部分的学习就可以掌握差不多了,请多多指教. 加载注册JDBC驱动: 打开数据库: 创建向数据库发送sql语句的statement: Res ...