欢迎来到天天文库
浏览记录
ID:37914812
大小:28.00 KB
页数:5页
时间:2019-06-02
《C++构造函数和析构函数》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C++构造函数和析构函数1.C++规定,每个类必须有默认的构造函数,没有构造函数就不能创建对象。2.若没有提供任何构造函数,那么c++提供自动提供一个默认的构造函数,该默认构造函数是一个没有参数的构造函数,它仅仅负责创建对象而不做任何赋值操作。3.只要类中提供了任意一个构造函数,那么c++就不在自动提供默认构造函数。4.类对象的定义和变量的定义类似,使用默认构造函数创建对象的时候,如果创建的是静态或者是全局对象,则对象的位模式全部为0,否则将会是随即的。#includeusingnamespacestd;c
2、lassStudent{public:Student()//无参数构造函数{number=1;score=100;}voidshow();protected:intnumber;intscore;};voidStudent::show(){cout<3、udent()函数体内的代码那么它和c++的默认提供的构造函数等价的。构造函数可以带任意多个的形式参数,这一点和普通函数的特性是一样的!下面我们来看一个带参数的构造函数是如何进行对象的始化操作的.#includeusingnamespacestd;classTeacher{public:Teacher(char*input_name)//有参数的构造函数{name=newchar[10];//name=input_name;//这样赋值是错误的strcpy(name,input_name);}voidsho4、w();protected:char*name;};voidTeacher::show(){cout<5、义不单纯是调用函数,而是创建一个类对象。 一旦类中有了一个带参数的构造函数而又没无参数构造函数的时候系统将无法创建不带参数的对象,所以上面的代码Teachera; 就是错误的!!! 这里还有一处也要注意://name=input_name;//这样赋值是错误的 因为name指是指向内存堆区的,如果使用name=input_name;会造成指针指向改变不是指向堆区而是指向栈区,导致在后面调用析构函数delete释放堆空间出错!(析构函数的内容我们后面将要介绍)c++规定如果一个类对象是另外一类的数据成员,那么在创建对象的6、时候系统将自动调用那个类的构造函数。#includeusingnamespacestd;classTeacher{public:Teacher(){director=newchar[10];strcpy(director,"王大力");}char*show();protected:char*director;};char*Teacher::show(){returndirector;}classStudent{public:Student(){number=1;score=100;}voidshow();p7、rotected:intnumber;intscore;Teacherteacher;//这个类的成员teacher是用Teacher类进行创建并初始化的};voidStudent::show(){cout<8、码中的Student类成员中teacher成员是的定义是用类Teacher进行定义创建的,那么系统碰到创建代码的时候就会自动调用Teacher类中的Teacher()构造函数对对象进行初始化工作! 这个例子说明类的分工很明确,只有碰到自己的对象的创建的时候才自己调用自己的构
3、udent()函数体内的代码那么它和c++的默认提供的构造函数等价的。构造函数可以带任意多个的形式参数,这一点和普通函数的特性是一样的!下面我们来看一个带参数的构造函数是如何进行对象的始化操作的.#includeusingnamespacestd;classTeacher{public:Teacher(char*input_name)//有参数的构造函数{name=newchar[10];//name=input_name;//这样赋值是错误的strcpy(name,input_name);}voidsho
4、w();protected:char*name;};voidTeacher::show(){cout<5、义不单纯是调用函数,而是创建一个类对象。 一旦类中有了一个带参数的构造函数而又没无参数构造函数的时候系统将无法创建不带参数的对象,所以上面的代码Teachera; 就是错误的!!! 这里还有一处也要注意://name=input_name;//这样赋值是错误的 因为name指是指向内存堆区的,如果使用name=input_name;会造成指针指向改变不是指向堆区而是指向栈区,导致在后面调用析构函数delete释放堆空间出错!(析构函数的内容我们后面将要介绍)c++规定如果一个类对象是另外一类的数据成员,那么在创建对象的6、时候系统将自动调用那个类的构造函数。#includeusingnamespacestd;classTeacher{public:Teacher(){director=newchar[10];strcpy(director,"王大力");}char*show();protected:char*director;};char*Teacher::show(){returndirector;}classStudent{public:Student(){number=1;score=100;}voidshow();p7、rotected:intnumber;intscore;Teacherteacher;//这个类的成员teacher是用Teacher类进行创建并初始化的};voidStudent::show(){cout<8、码中的Student类成员中teacher成员是的定义是用类Teacher进行定义创建的,那么系统碰到创建代码的时候就会自动调用Teacher类中的Teacher()构造函数对对象进行初始化工作! 这个例子说明类的分工很明确,只有碰到自己的对象的创建的时候才自己调用自己的构
5、义不单纯是调用函数,而是创建一个类对象。 一旦类中有了一个带参数的构造函数而又没无参数构造函数的时候系统将无法创建不带参数的对象,所以上面的代码Teachera; 就是错误的!!! 这里还有一处也要注意://name=input_name;//这样赋值是错误的 因为name指是指向内存堆区的,如果使用name=input_name;会造成指针指向改变不是指向堆区而是指向栈区,导致在后面调用析构函数delete释放堆空间出错!(析构函数的内容我们后面将要介绍)c++规定如果一个类对象是另外一类的数据成员,那么在创建对象的
6、时候系统将自动调用那个类的构造函数。#includeusingnamespacestd;classTeacher{public:Teacher(){director=newchar[10];strcpy(director,"王大力");}char*show();protected:char*director;};char*Teacher::show(){returndirector;}classStudent{public:Student(){number=1;score=100;}voidshow();p
7、rotected:intnumber;intscore;Teacherteacher;//这个类的成员teacher是用Teacher类进行创建并初始化的};voidStudent::show(){cout<8、码中的Student类成员中teacher成员是的定义是用类Teacher进行定义创建的,那么系统碰到创建代码的时候就会自动调用Teacher类中的Teacher()构造函数对对象进行初始化工作! 这个例子说明类的分工很明确,只有碰到自己的对象的创建的时候才自己调用自己的构
8、码中的Student类成员中teacher成员是的定义是用类Teacher进行定义创建的,那么系统碰到创建代码的时候就会自动调用Teacher类中的Teacher()构造函数对对象进行初始化工作! 这个例子说明类的分工很明确,只有碰到自己的对象的创建的时候才自己调用自己的构
此文档下载收益归作者所有