构造函数constructor 与析构函数destructor(一)

构造函数定义:构造函数c++中在创建对象时自动调用,用来初始化对象的特殊函数。

(1)构造函数的名字必须与类的名字相同,不能有返回值,哪怕是void 也不行。

(2)通常情况下构造函数应声明为公有函数,否则它不能像其他成员函数那样被显式地调用 构造函数被声明为私有有特殊的用途,这个以后再写。

(3)但是可以有参数,因为有参数,故可以被重载。

 1 #ifndef TEST_H
 2 #define TEST_H
 3 class Test{
 4     int m_i;
 5 public:
 6     Test(int i=0);
 7     Test(int i,char c);//构造函数被重载
 8     void fun();
 9     void fun(int i=0);//普通函数被重载,不过这种重载会有问题,当在函数中以fun()这种形式调用fun函数时,连接器就不知道链接哪一个具体的fun了。
10
11 };
12 #endif //TEST_H

(4)不带参数的构造函数 或者所有的参数都有默认值的构造函数,成为默认构造函数,默认构造函数只能有一个,如果默认构造函数既包含不带参数的,也包含所有参数都有默认值的,那么编译器就会报错。

 1 #ifndef TEST_H
 2 #define TEST_H
 3 class Test{
 4     int m_i;
 5 public:
 6     Test(int i=0);
 7         Test();//类中有两个默认构造函数
 8
 9 };
10 #endif //TEST_H

(5)如果程序中未声明,则系统自动产生出一个默认构造函数

(6)构造函数和delete:可以在堆中用new operator 分配一个对象的空间,这种分配的对象空间要由程序员自己释放,用delete,在new时调用constructor 在delete时调用destructor。

 1 #ifndef TEST_H
 2 #define TEST_H
 3 class Test{
 4     int m_i;
 5 public:
 6     Test(int i = 0){};
 7     Test(int i, char c){};
 8
 9 };
10 #endif //TEST_H
11
12 int main(){
13
14     Test* tp = new Test();//调用constructor
15     delete tp;//调用destructor
16     return 0;
17 }

(7)一般的局部类对象的初始化顺序,即构造函数被调用的顺序,一般语气定义的顺序一样,释放的顺序,即析构函数被调用的顺序,一般与构造函数调用的顺序相反。

(8)全局对象的构造函数在主函数main之前被调用,在main函数结束时,析构函数被调用

(9)构造函数和数组

#ifndef TEST_H
#define TEST_H
class Test{
    int m_i;
public:
    Test(int i = 0){}
    Test(int i, char c){}
    ~Test(){}

};
#endif //TEST_H

int main(){

    Test* tp=Test[2];//创建一个Test对象的数组,被tp指针指向。
         delete [] tp;//删除指向数组的指针,一定要加[]。
    return 0;
}

析构函数的定义:析构函数是c++中的类对象生存期结束时,被调用用来释放对象空间的特殊函数,也是自动调用的。

(1)析构函数的名字在类名前加一个~符号

(2)析构函数不能有返回值,也不能有参数,因此不可以重载

(3)析构函数可以被显示的调用,构造函数不行

 1 #ifndef TEST_H
 2 #define TEST_H
 3 class Test{
 4     int m_i;
 5 public:
 6     Test(int i = 0){}
 7     Test(int i, char c){}
 8     ~Test(){}
 9
10 };
11 #endif //TEST_H
12
13 int main(){
14
15     Test* tp = new Test();
16     tp->~Test();//显示调用析构函数
17     delete tp;
18     return 0;
19 }
时间: 2024-10-11 05:02:47

构造函数constructor 与析构函数destructor(一)的相关文章

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

(1)转换构造函数 转换构造函数的定义:转换构造函数就是把普通的内置类型转换成类类型的构造函数,这种构造函数只有一个参数.只含有一个参数的构造函数,可以作为两种构造函数,一种是普通构造函数用于初始化对象,一种是转换构造函数 1 //test.h 2 #ifndef TEST_H 3 #define TEST_H 4 class Test{ 5 int m_i; 6 public: 7 Test(int i = 0);//转换构造函数,也是普通构造函数 8 ~Test(); 9 10 }; 11

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

(1)构造函数初始化列表: 1 class Test{ 2 int i; 3 public: 4 Test(int vi):i(vi){}//这里的从冒号开始,到右大括号结束,这一段是构造函数初始化列表 5 6 }; 构造函数的执行分为两个阶段:(1)初始化阶段  (2)普通计算阶段 初始化是我们定义一个变量,分配内存时直接给变量赋值,例如 int i=10;  而int k; k=10;这样的就不是初始化,是赋值.所以在初始化列表里面的初始化才是真正的初始化,即初始化阶段.而在构造函数内的那些

Python 构造函数、 Python 析构函数、Python 垃圾回收机制

构造函数与析构函数 构造函数: 用于初始化类的内容部状态,Python提供的构造函数式 __init__(); __init__()方法是可选的,如果不提供,Python 会给出默认的__init__方法 一般数据的获取需要定义的get和set方法 析构函数: 用于释放对象占用的资源,Python 提供的析构函数式__del__(); __del__()也是可选的,如果不提供,则Python 会在后台提供默认析构函数 如果要显式的调用析构函数,可以使用del关键字,方式如下: del对象名 垃圾

类String的构造函数(包含一个拷贝构造函数)、析构函数和赋值函数

每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数). class String { public: String(const char *str = NULL); // 普通构造函数 String(const String &other); // 拷贝构造函数 ~ String(void); // 析构函数 String & operate =(const String &other); // 赋值函数 // 相加函数,如果没

Java 语法 索引 ----- 构造函数(constructor)

重载 class MyRectangle{ int x, y; public MyRectangle() { x = 10; y = 20; } public MyRectangle(int a) { x = a; y = a; } public MyRectangle(int a, int b) { x = a; y = b; } } Constructor chaining public MyRectangle() { this(10,20); } public MyRectangle(in

JavaScript探秘:构造函数 Constructor

除了创建对象,构造函数(constructor) 还做了另一件有用的事情—自动为创建的新对象设置了原型对象(prototype object) .原型对象存放于 ConstructorFunction.prototype 属性中. 例如,我们重写之前例子,使用构造函数创建对象“b”和“c”,那么对象”a”则扮演了“Foo.prototype”这个角色: // 构造函数 function Foo(y) { // 构造函数将会以特定模式创建对象:被创建的对象都会有"y"属性 this.y

C#析构函数(destructor)和终结器(Finalizer) .

使用析构函数释放资源 析构函数用于析构类的实例. 1)         不能在结构中定义析构函数.只能对类使用析构函数. 2)         一个类只能有一个析构函数. 3)         无法继承或重载析构函数. 4)         无法调用析构函数.它们是被自动调用的. 5)         析构函数既没有修饰符,也没有参数. 例如,下面是类 Car 的析构函数的声明: [csharp] view plaincopy class Car { /// <summary> /// 析构函

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

如果你从其他语言转到javascript语言的开发,你会发现有很多让你晕掉的术语,其中工厂函数(factory function)和构造函数(constructor function)就是其中的一个.本文试图理顺这两者之间的区别. Factory functions 工厂函数是将返回一个新的object的任何不是类或者构造函数的函数.在js中,任何函数都能够返回一个object.如果我们不是通过new function()的方式来获得这个对象的,那么她就是一个factory工厂函数. funct

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

创建对象时系统会自动调用构造函数进行初始化工作,同样,销毁对象时系统也会自动调用一个函数来进行清理工作,例如释放分配的内存.关闭打开的文件等,这个函数就是析构函数. 析构函数(Destructor)也是一种特殊的成员函数,没有返回值,不需要程序员显式调用(程序员也没法显式调用),而是在销毁对象时自动执行.构造函数的名字和类名相同,而析构函数的名字是在类名前面加一个~符号. 注意:析构函数没有参数,不能被重载,因此一个类只能有一个析构函数.如果用户没有定义,编译器会自动生成一个默认的析构函数. 上