构造函数constructor 与析构函数destructor(一)
构造函数定义:构造函数c++中在创建对象时自动调用,用来初始化对象的特殊函数。
(1)构造函数的名字必须与类的名字相同,不能有返回值,哪怕是void 也不行。
(2)通常情况下构造函数应声明为公有函数,否则它不能像其他成员函数那样被显式地调用 构造函数被声明为私有有特殊的用途,这个以后再写。
(3)但是可以有参数,因为有参数,故可以被重载。
#ifndef TEST_H
#define TEST_H
class Test{
int m_i;
public:
Test(int i=);
Test(int i,char c);//构造函数被重载
void fun();
void fun(int i=);//普通函数被重载,不过这种重载会有问题,当在函数中以fun()这种形式调用fun函数时,连接器就不知道链接哪一个具体的fun了。 };
#endif //TEST_H
(4)不带参数的构造函数 或者所有的参数都有默认值的构造函数,成为默认构造函数,默认构造函数只能有一个,如果默认构造函数既包含不带参数的,也包含所有参数都有默认值的,那么编译器就会报错。
#ifndef TEST_H
#define TEST_H
class Test{
int m_i;
public:
Test(int i=);
Test();//类中有两个默认构造函数 };
#endif //TEST_H

(5)如果程序中未声明任何构造函数,则系统自动产生出一个默认构造函数,但是只要程序员自己生命了一个构造函数,编译器就不会再生产默认构造函数。
(6)构造函数和delete:可以在堆中用new operator 分配一个对象的空间,这种分配的对象空间要由程序员自己释放,用delete,在new时调用constructor 在delete时调用destructor。
#ifndef TEST_H
#define TEST_H
class Test{
int m_i;
public:
Test(int i = ){};
Test(int i, char c){}; };
#endif //TEST_H int main(){ Test* tp = new Test();//调用constructor
delete tp;//调用destructor
return ;
}
(7)一般的局部类对象的初始化顺序,即构造函数被调用的顺序,一般语气定义的顺序一样,释放的顺序,即析构函数被调用的顺序,一般与构造函数调用的顺序相反。
(8)全局对象的构造函数在主函数main之前被调用,在main函数结束时,析构函数被调用
(9)构造函数和数组
#ifndef TEST_H
#define TEST_H
class Test{
int m_i;
public:
Test(int i = ){}
Test(int i, char c){}
~Test(){} };
#endif //TEST_H int main(){ Test* tp=Test[];//创建一个Test对象的数组,被tp指针指向。
delete [] tp;//删除指向数组的指针,一定要加[]。
return ;
}
析构函数的定义:析构函数是c++中的类对象生存期结束时,被调用用来释放对象空间的特殊函数,也是自动调用的。
(1)析构函数的名字在类名前加一个~符号
(2)析构函数不能有返回值,也不能有参数,因此不可以重载
(3)析构函数可以被显示的调用,构造函数不行
#ifndef TEST_H
#define TEST_H
class Test{
int m_i;
public:
Test(int i = ){}
Test(int i, char c){}
~Test(){} };
#endif //TEST_H int main(){ Test* tp = new Test();
tp->~Test();//显示调用析构函数
delete tp;
return ;
}
构造函数constructor 与析构函数destructor(一)的更多相关文章
- 构造函数constructor 与析构函数destructor(五)
我们知道当调用默认拷贝构造函数时,一个对象对另一个对象初始化时,这时的赋值时逐成员赋值.这就是浅拷贝,当成员变量有指针时,浅拷贝就会在析构函数那里出现问题.例如下面的例子: //test.h #ifn ...
- 构造函数constructor 与析构函数destructor(四)
拷贝构造函数:拷贝构造函数就是在用一个类对象来创建另外一个类对象时被调用的构造函数,如果我们没有显示的提供拷贝构造函数,编译器会隐式的提供一个默认拷贝构造函数. 拷贝构造函数的定义是X(const X ...
- 构造函数constructor 与析构函数destructor(二)
(1)转换构造函数 转换构造函数的定义:转换构造函数就是把普通的内置类型转换成类类型的构造函数,这种构造函数只有一个参数.只含有一个参数的构造函数,可以作为两种构造函数,一种是普通构造函数用于初始化对 ...
- 构造函数constructor 与析构函数destructor(三)
(1)构造函数初始化列表: 1 class Test{ 2 int i; 3 public: 4 Test(int vi):i(vi){}//这里的从冒号开始,到右大括号结束,这一段是构造函数初始化列 ...
- GCC的__attribute__ ((constructor))和__attribute__ ((destructor))
通过一个简单的例子介绍一下gcc的__attribute__ ((constructor))属性的作用.gcc允许为函数设置__attribute__ ((constructor))和__attrib ...
- javascript工厂函数(factory function)vs构造函数(constructor function)
如果你从其他语言转到javascript语言的开发,你会发现有很多让你晕掉的术语,其中工厂函数(factory function)和构造函数(constructor function)就是其中的一个. ...
- 【转】c++析构函数(Destructor)
创建对象时系统会自动调用构造函数进行初始化工作,同样,销毁对象时系统也会自动调用一个函数来进行清理工作,例如释放分配的内存.关闭打开的文件等,这个函数就是析构函数. 析构函数(Destructor)也 ...
- C++——构造函数 constructor
What is constructor C++中,如果你想要创建一个object,有一个函数会自动被调用(不需要programmer显式调用 ),这个函数就是constructor; construc ...
- 类(class)、构造函数(constructor)、原型(prototype)
类 Class 类的概念应该是面向对象语言的一个特色,但是JavaScript并不像Java,C++等高级语言那样拥有正式的类,而是多数通过构造器以及原型方式来仿造实现.在讨论构造器和原型方法前,我可 ...
随机推荐
- 关于RabbitMQ以及RabbitMQ和Spring的整合
转自:https://www.cnblogs.com/s648667069/p/6401463.html 基本概念 RabbitMQ是流行的开源消息队列系统,用erlang语言开发.RabbitMQ是 ...
- c++Builder XE6 MD5 加密算法 BASE64 URL 编码
xe6,xe7 BASE64XE6 MD5 加密算法Delphifunction MD5(const texto: string): string; var idmd5: TIdHashMessage ...
- ubuntu 命令安装软件
终端安装(命令安装).第一,找到终端或者按住Ctrl+Alt+t 打开终端;第二输入命令,命令如下:cd /xxx/xxx/,(xxx代表软件包路径,一直到你放置软件包的文件夹),之后输入命令:sud ...
- 树莓派实现远程下载(apache2+aria2+webui-aria2)
1.挂载存储设备(可远程设备) 本例是挂载路由器上的移动硬盘,也可以挂载连接在树莓派上的U盘. sudo mount -t cifs -o dir_mode=0777,file_mode=0777 ...
- 了解innodb_support_xa(分布式事务)
innodb_support_xa可以开关InnoDB的xa两段式事务提交.默认情况下,innodb_support_xa=true,支持xa两段式事务提交.此时MySQL首先要求innodb pre ...
- 关于str.split(",")中间 什么时候该加\\转义
java 分割符,对于某些符号的分割符进行切割的时候需要加转义字符,我贴上例子 1. package test1; public class split { public static void ma ...
- OpenCv 人脸识别 基础
#include <opencv2\opencv.hpp> #include <iostream> using namespace std; int main() { // 摄 ...
- 《你不知道的JavaScript下卷》知识点笔记
1. [1, 2, 3] == [1, 2, 3] 返回false [1, 2, 3] == “1, 2, 3” 返回true 2. 如果 < 比较的两个值都是字符串, 就像在b < c中 ...
- form 表单排序
<html> <head></head> <body> <form class="form-inline"> ...
- ensembl数据库的使用方法
1)下载各种数据bam.gtf.fasta.ded等的地址 ftp://ftp.ensembl.org/../pub/release-93/