构造函数定义:构造函数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(一)的更多相关文章

  1. 构造函数constructor 与析构函数destructor(五)

    我们知道当调用默认拷贝构造函数时,一个对象对另一个对象初始化时,这时的赋值时逐成员赋值.这就是浅拷贝,当成员变量有指针时,浅拷贝就会在析构函数那里出现问题.例如下面的例子: //test.h #ifn ...

  2. 构造函数constructor 与析构函数destructor(四)

    拷贝构造函数:拷贝构造函数就是在用一个类对象来创建另外一个类对象时被调用的构造函数,如果我们没有显示的提供拷贝构造函数,编译器会隐式的提供一个默认拷贝构造函数. 拷贝构造函数的定义是X(const X ...

  3. 构造函数constructor 与析构函数destructor(二)

    (1)转换构造函数 转换构造函数的定义:转换构造函数就是把普通的内置类型转换成类类型的构造函数,这种构造函数只有一个参数.只含有一个参数的构造函数,可以作为两种构造函数,一种是普通构造函数用于初始化对 ...

  4. 构造函数constructor 与析构函数destructor(三)

    (1)构造函数初始化列表: 1 class Test{ 2 int i; 3 public: 4 Test(int vi):i(vi){}//这里的从冒号开始,到右大括号结束,这一段是构造函数初始化列 ...

  5. GCC的__attribute__ ((constructor))和__attribute__ ((destructor))

    通过一个简单的例子介绍一下gcc的__attribute__ ((constructor))属性的作用.gcc允许为函数设置__attribute__ ((constructor))和__attrib ...

  6. javascript工厂函数(factory function)vs构造函数(constructor function)

    如果你从其他语言转到javascript语言的开发,你会发现有很多让你晕掉的术语,其中工厂函数(factory function)和构造函数(constructor function)就是其中的一个. ...

  7. 【转】c++析构函数(Destructor)

    创建对象时系统会自动调用构造函数进行初始化工作,同样,销毁对象时系统也会自动调用一个函数来进行清理工作,例如释放分配的内存.关闭打开的文件等,这个函数就是析构函数. 析构函数(Destructor)也 ...

  8. C++——构造函数 constructor

    What is constructor C++中,如果你想要创建一个object,有一个函数会自动被调用(不需要programmer显式调用 ),这个函数就是constructor; construc ...

  9. 类(class)、构造函数(constructor)、原型(prototype)

    类 Class 类的概念应该是面向对象语言的一个特色,但是JavaScript并不像Java,C++等高级语言那样拥有正式的类,而是多数通过构造器以及原型方式来仿造实现.在讨论构造器和原型方法前,我可 ...

随机推荐

  1. sbt的安装测试

    1.下载 wget https://github.com/sbt/sbt/releases/download/v0.13.15/sbt-0.13.15.tgz 2.安装 tar -zxvf sbt-0 ...

  2. 8. myeclipse10 svn插件安装

    1.在myeclipse安装目录下找到dropins文件夹,并在下面创建svn文件夹 2. 解压site-1.8.22.zip 3. 4. 5. 6.

  3. HTML5 Canvas ( 圆和切点曲线的绘制 ) arc, arcTo

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. Git reset head revert 回滚

    Overview 涉及Git一些日常操作 :) 基础知识 <Pro Git>至少了解branch,commit的概念,及基本的原理 Git常用魔法 存档:master代码回滚方法 我是QA ...

  5. windows本地blast

    详细可参考https://www.jianshu.com/p/2f125cdf8262:https://blog.csdn.net/qq_34296043/article/details/544277 ...

  6. mysql for update语句

    我们都知道for update语句会锁住一张表,锁表的细节很多人却不太清楚,下面我们举例看下. 在表上我们有个索引,如下: 现在在我们通过索引store_id锁表: 我们再开一个客户端,还是锁住同一个 ...

  7. cmd无法输入中文解决方案

    1.regedit 2.选中HKEY_CURRENT_USER-Console,找到LoadConIme,双击,设置值为1,十六进制 3.此时应该已经ok了.如还不行,看一下%systemroot%\ ...

  8. Time range (447392) for take 'Take 001' is larger than maximum allowed(100000).

    http://www.cnblogs.com/lopezycj/archive/2012/05/16/unity3d_tuchao.html https://forum.unity3d.com/thr ...

  9. Food(最大流)

    Food http://acm.hdu.edu.cn/showproblem.php?pid=4292 Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  10. swift iOS开发初步使用

    使用Xcode6-Beta 创建一个swift空的工程,新建一个UIViewController,语言选择swift. 在MainViewController.swift 添加如下代码,声明变量及cl ...