解析c++构造函数与析构函数
来源:互联网 发布:linux判断文件是否存在 编辑:程序博客网 时间:2024/04/29 11:58
目录
- 目录
- 构造函数的定义
- 构造函数的特点
- 构造函数
- 默认构造函数
- 转换构造函数
- 拷贝构造函数
- 析构函数的定义
- 析构函数的特点
- 析构函数
构造函数的定义
定义:构造函数是一种特殊的成员函数,对对象进行初始化的函数。
构造函数的特点
- 构造函数名字必须与类名相同。
- 构造函数不具有任何类型,没有返回值。
- 在建立类的对象的时候,系统会自动调用构造函数。
- 如果用户没有定义构造函数,系统会默认生成一个构造函数。
构造函数
由于构造函数的参数不同,构造函数可以进行重载,可以分为默认构造函数、转换构造函数、拷贝构造函数。
默认构造函数
定义:不带参数的构造函数。如果程序中不声明构造函数,那么系统会默认生成一个构造函数。
转换构造函数
定义:只有一个参数的构造函数,并将其它类型转换为类类型。
注意:
1. String s1(“hello”);
2. s1 = “world”;
上面第二行是将“world”赋值给s1对象。先调用转换构造函数将“world”转换为类类型,生成一个临时对象。再调用’=’将临时对象赋值给s1对象。
拷贝构造函数
定义:只有一个参数并且参数为该类的引用的构造函数,用一个已有的对象类初始化新的同一个类的对象。
1、String.h
/*****************************************************Copyright (C): 2017-2018 File name : String.hAuthor : ZhengqijunDate : 2017年02月11日 星期六 14时58分56秒Description : 类的声明Funcion List : *****************************************************/#ifndef _STRING_H_#define _STRING_H_#include <iostream>using namespace std;class String{public: String(); //默认构造函数 String(char *str); //转换构造函数 String(const String& other);//拷贝构造函数 ~String(); //析构函数 /* 调用构造函数需要对'='进行重载 */ String& operator=(char *str); String& operator=(const String& other); void Display() const; //成员函数private: char *str_; //属性};#endif
2、String.cpp
/*****************************************************Copyright (C): 2017-2018 File name : String.cppAuthor : ZhengqijunDate : 2017年02月11日 星期六 15时01分31秒Description : 实现类的函数Funcion List : *****************************************************/#include <iostream>#include <string.h>#include "String.h"using namespace std;String::String(){ cout << "default constructor String!" << endl; str_ = new char['\0'];}String::String(char *str){ cout << "constructor String!" << endl; int len = strlen(str) + 1; str_ = new char[len]; memset(str_, 0, len); strcpy(str_, str);}String::String(const String& other){ int len = strlen(other.str_) + 1; str_ = new char[len]; memset(str_, 0, len); strcpy(str_, other.str_);}String& String::operator=(char *str){ int len = strlen(str) + 1; str_ = new char[len]; memset(str_, 0, len); strcpy(str_, str); return *this;}String& String::operator=(const String& other){ if(this == &other) //用this指针来与自身进行比较 { return *this; } int len = strlen(other.str_) + 1; delete [] str_; str_ = new char[len]; memset(str_, 0, len); strcpy(str_, other.str_); return *this;}String::~String(){ cout << "destroy String!" << endl;}void String::Display() const{ cout << "str = " << str_ << endl;}
3、Main.cpp
/*****************************************************Copyright (C): 2017-2018 File name : Main.cppAuthor : ZhengqijunDate : 2017年02月11日 星期六 15时10分27秒Description : 主函数Funcion List : main()*****************************************************/#include <iostream>#include "String.h"using namespace std;int main(){ String s1("hello"); //调用转换构造函数对s1进行初始化 s1.Display(); String s2(s1); //调用拷贝构造函数将对象s1赋值给对象s2 s2.Display(); return 0;}
运行后输出的结果是:
constructor String!str = hellostr = hellodestroy String!destroy String!
析构函数的定义
定义:析构函数也是一种特殊的成员函数,当对象的生命期结束时,对内存进行清理工作。
析构函数的特点
- 当对象的生命期结束时,系统自动调用析构函数。
- 析构函数名与类名相似,只是多了一个’~’。
- 析构函数没有参数,没有返回值。
- 如果没有定义析构函数,系统会默认生成一个析构函数。
- 析构函数没有参数,所以不能被重载。
析构函数
注意:析构函数的调用顺序正好与构造函数的调用顺序相反。先构造的后析构,后构造的先析构。相当于栈 -> 先进后出。
0 0
- c++-构造函数与析构函数
- C++--构造函数与析构函数
- 【c++】构造函数与析构函数
- C++:构造函数与析构函数
- 【C++】构造函数&析构函数的解析(应用)
- 深入解析C++构造函数与析构函数
- C++构造函数与析构函数的解析
- 拷贝构造函数与析构函数的简单解析
- 解析c++构造函数与析构函数
- C++构造函数与析构函数的解析
- C++:实例解析构造函数、析构函数、拷贝构造函数等
- 【C++】初始化与清除(构造函数与析构函数)
- [C++]构造函数与析构函数讲解
- 构造函数与析构函数(C++)
- C语言的构造函数与析构函数
- C++_构造函数与析构函数
- 初识C#——构造函数与析构函数
- 关于Object-c 中的构造函数与析构函数
- winform中的增删改查
- 安卓开发学习心得-------欢迎界面的心得体会
- Entity Framework6测试使用
- 栈和队列的基本应用
- spring 事务传播行为实例分析
- 解析c++构造函数与析构函数
- C# Socket编程(3)编码和解码
- 维护数列
- mongoose学习
- java8学习一
- 杭电 hdu 1022. Train Problem I
- Category、Protocol、Extension
- Linux使用gdb调试时遇到Missing separate debuginfos, use: debuginfo-install libgcc-4.4.7-3.el6.x86_64
- C# Socket编程(4)初识Socket和数据流