C++之类(二)

2019-05-25 20:02:54 浏览数 (2)

接着上次的继续写,我们上次在类里面定义了一个set函数用来给类的数据成员赋值。其实,类本身提供了一个特殊的函数——构造函数。构造函数的函数名和类名相同,无返回值。构造函数的作用就是给类的数据成员初始化(赋值)。我们来新建一个类吧。

代码语言:javascript复制
class MyClass
{
	int num;
	char str[10];
	double f;
	
	MyClass(int num,char *str,double f)		//构造函数
	{
		this->num = num;
		strcpy(&this->str,str);
		this->f = f;
	}
}

这里我们看到了“this指针”,这个指针指向类本身。我们构造函数的参数列表里面形式参数的名字和MyClass这个类的数据成员的名字一样。这个时候, 我们无法区分形式参数和数据成员,因此使用了this指针。这就避免了名字相同这个问题。构造函数和上次我们使用的set函数不一样。set函数需要我们去调用,而构造函数不需要程序员去调用。编译器会自动使用构造函数来初始化该类的对象。当我们没有写自己的构造函数的时候,系统会自动生成一个默认的构造函数。初始化对象的时候就会调用默认构造函数。下面我们来初始化一个类对象。

代码语言:javascript复制
class MyClass
{
	int num;
	char str[10];
	double f;
	
	MyClass(int num,char *str,double f)		//构造函数
	{
		this->num = num;
		strcpy(&this->str,str);
		this->f = f;
	}
	void show()
	{
		cout << num << endl;
		cout << str << endl;
		cout << f << endl;
	}
}

int mian()
{
	MyClass oj(3,"hello",3.14);		//初始化对象
	
	
	oj.show();
	
	
	system("pause");
	return 0;
}

每一个对象都有自己的作用域,当对象在超出作用域的时候会自动撤销。对象所占用的资源将被回收。因此,类有另外一个特殊的函数——析构函数。这个函数用来回收资源。析构函数在类对象被销毁时,自动调用。另外,析构函数也没有返回值。还有,它没有任何参数(包括void),因此它不能被重载,而构造函数可以被重载。析构函数的名字是在类名前面加上“~”这个符号。另外构造函数无法声明为const,volatile,static。大部分的类都不需要显式的析构函数,当然,析构函数并不仅限于用来释放资源。一般而言,析构函数可以执行任意操作,该操作是类设计者希望在该类对象的使用完毕之后执行的。

0 人点赞