标题 学习学习
关键词 构造函数
内容
1 析构函数
析构函数可以由用户定义,也可以由系统自动生成。如果用户没有为类定义析构函数,则系统为类生成一个缺省的析构函数,该缺省的析构函数是空函数,即函数体中没有语句。
析构函数的使用
#include <iostream>
#include<string.h>
class G
{
char *s;
public:
G(char *p)
{
int n=strlen(p);
s=new char[n+1];
strcpy(s,p);//strcpy(s1,s2);strcpy函数的意思是:把字符串s2中的内容copy到s1中,连字符串结束标志也一起copy.
这样s1在内存中的存放为:ch\0;std::cout<<"调用了构造函数\n";
}
~G()
{
std::cout<<"调用了析构函数\n";
delete []s;
}
void print()
{
std::cout<<s<<std::endl;
}
};
int main()
{
G g1("c++ program");
g1.print();
}
输出的是//其实并没有太懂,觉的书上的定义好难懂 = =
2 缺省构造函数
每个类·都有构造函数,如果用户没有给类定义构造函数,则编译系统自动生成一个缺省的构造函数。该缺省的构造函数没有参数,其函数体内也没有语句,他仅用来生成对象而不是初始化对象。只要用户在定义了构造函数时,编译系统就不用为类生成缺省值的构造函数。例如类H和I
class H
{
int a,b;
};
class I
{
int a,b;
public:
I(int ti, int t2)
{a=ti;b=t2;}
};
系统会给H增加一个公有的构造函数:
H(){}
由于该构造函数内部没有功能语句,所以不能始初话对象的成员,如果以下列方式定义类H的对象;
H h1;
则对象的数据成员不定。
由于类I定义时提供了一个构造函数,所以编译系统就不再为类I提供缺省的构造函数。此时如果以下列的方式确定类I的对象:
I i1;//错误
I i1(1,2)
//这个我懂