c++中对象的构造和销毁
对象的初始化 如下
ckasss Person
{
public:
char name[];
char sex;
int age; }; Person p={"cheng",'f' ,}; //对象初始化
构造数组对象时,需要一个没有参数的构造函数,进行对象初始化。
如果定义了一个对象,而忘记了初始化,对象里面的内容都是未知的,进而造成错误,
而类里面有一个自动初始化对象,通过构造函数去初始化对象。
构造函数
(1)构造函数是成员函数,函数体可写在类体内,也可以写在类体外
(2)构造函数时特殊函数,该函数的名字与类名字相同,不指定返回值类型。
(3)构造函数可以重载,即可以定义多个参数个数不同的构造函数
(4)在创建对象时,系统自动调用构造函数。
形式如下
ckass Person
{
public: Perosn() //内部创建
{
int i;
return ;
}
}; 外部创建
Person :: Person()
{
int i;
return;
}
析构函数
对象同样需要恰当的被销毁,c++提供了析构函数,
在对象销毁时自动调用,(并且析构函数不带参数)
一个类只能定义一个析构函数,即析构函数不允许重载,
一般的,将析构函数定义为公有成员函数,
在类体内定义析构函数的一般格式是:
~classname()
{
....
}
在类体外定义析构函数的一般格式是:
classname :: ~classname()
{
....
}
1.当对象是系统自动创建的,则在对象的作用域结束时,系统自动调用析构函数。
2.当一个对象是使用new运算符被动态创建的,在使用delete运算符释放它时,delete将会自动调用析构函数。
1、全局对象,程序一开始,其构造函数就先被执行(比程序进入点更早);程序即将结束前其析构函数将被执行。
2、局部对象,当对象生成时,其构造函数被执行;当程序流程将离开该对象的声明周期时,其析构函数被执行。
3 、静态(static)对象,当对象生成时其构造函数被执行;当程序将结束时其析构函数才被执行,但比全局对象的析构函数早一步执行。
4、以new方式产生出来的局部对象,当对象生成时其构造函数被执行,析构函数则在对象被delete时执行时执行
c++中对象的构造和销毁的更多相关文章
- C++深度解析教程学习笔记(6)对象的构造和销毁
1. 对象的初始化 (1)从程序设计的角度看,对象只是变量,因此: ①在栈上创建对象时,成员变量初始化为随机值 ②在堆上创建对象时,成员变量初始化为随机值 ③在静态存储区创建对象时,成员变量初始化为 ...
- C++中对象的构造顺序
1,C++ 中的类可以定义多个对象,那么对象构造顺序是怎样的? 1,很多的 bug 是由对象的构造顺序造成的,虽然它不难: 2,对象的构造往往和构造函数牵涉在一起,构造函数的函数体又可能由非常复杂的程 ...
- Java中对象构造
构造函数 作用:在构造对象的同时初始化对象.java强制要求对象 诞生同时被初始化,保证数据安全. 调用过程和机制:①申请内存,②执行构造函数的函数体,③返回对象的引用. 特点:与类同名,无返回类型, ...
- C++类继承中,基类/当前对象属性/当前对象的构造顺序
[1]中提到,规范的派生类构造函数三个要点: 首先创建基类对象 应通过成员初始化列表,创建基类对象 应该初始化本派生类新增的成员变量 那在构造派生类实例的过程中,其基类(以及多继承的时候多个基类)/当 ...
- cocos2dx中对象的两步初始化
笔者进来开始研究cocos2d这个非常火爆的游戏引擎,在一番折腾后,总算在win7系统下把windows和android平台搭建好了.当然接下来是从官方示例中最简单的HelloCpp项目开始.笔者使用 ...
- .net中对象序列化技术浅谈
.net中对象序列化技术浅谈 2009-03-11 阅读2756评论2 序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储 ...
- C++中对象初始化
在C++中对象要在使用前初始化,永远在使用对象之前先将它初始化. 1.对于无任何成员的内置类型,必须手工完成此事. 例如: int x=0; double d; std::cin>>d; ...
- (原)java中对象复制、==、equals
对于基本数据类型而言,即如下八种基本数据类型,int,boolean,char,byte,short,float,double,long. public class test { public sta ...
- js中对象的创建
json方式,构造函数方式,Object方式,属性的删除和对象的销毁 <html> <head> <title>js中的对象的创建</title> &l ...
随机推荐
- Visual Studio 2015 编译生成支持HTTPS协议的libcurl静态库
由于之前的工作需要使用libcurl 开源项目库 在各种研究后发现无法使用HTTPS协议 后来经过各种翻阅文档,发现需要OpenSSL支持,这个需要自己下载并自己编译生成 lib 或者 dll 至于O ...
- POJ2186 Popular Cows 题解 强连通分量
题目链接:http://poj.org/problem?id=2186 题目大意: 每头牛都想成为牛群中的红人. 给定N头牛的牛群和M个有序对(A, B),(A, B)表示牛A认为牛B是红人: 该关系 ...
- Python基础复习函数篇
目录 1.猴子补丁2. global和nonlocal关键字3.迭代器和生成器4.递归函数5.高阶函数和lamdba函数6.闭包7.装饰器 1. 猴子补丁 猴子补丁主要用于在不修改已有代码情况下修 ...
- 《带你装B,带你飞》pytest修仙之路3 - setup/teardown
1. 简介 学过unittest的都知道里面用前置和后置setup和teardown非常好用,在每次用例开始前和结束后都去执行一次.当然还有更高级一点的setupClass和teardownClass ...
- css3让元素自适应高度
知识点: viewport:可视窗口,也就是浏览器.vw Viewport宽度, 1vw 等于viewport宽度的1%vh Viewport高度, 1vh 等于viewport高的的1% calc( ...
- vim添加多行注释的几种方式
最近需要在阿里云上部署项目,不可避免地会遇到vim这个工具,查了一些资料,总结了一下使用vim多行注释的方法 块操作 多行注释: 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块) ...
- 题解 LA3720
题目大意 多组数据,每组数据给定两个整数 \(n,m\),请求出 \(n\times m\) 的点阵(即 \((n-1)\times(m-1)\) 的方格)中有多少条非水平竖直的经过至少两个格点的不同 ...
- Python开发 之 Websocket 的使用示例
1.唠唠叨叨 最近又回顾了下Websocket,发现已经忘的七七八八了.于是用js写了客户端,用python写了服务端,来复习一下这方面的知识. 2.先看一下效果吧 2.1.效果1(一个客户端连上服务 ...
- 6441. 【GDOI2020模拟01.17】小 ω 维护序列
Description Input Output 输出到标准输出流中. 若干行,对于每个操作 1 和操作 5,输出一个数表示答案. Sample Input Sample Input1 5 8 1 2 ...
- 月薪30k的Java架构师JVM常见面试题解析
在做程序员的路上经常会遇到的JVM一些经典面试题,今天给大家分享出我自己的解题思路,希望对大家有帮助,后续有空会持续更新. 1.什么情况下会发生栈内存溢出. 思路: 描述栈定义,再描述为什么会溢出,再 ...