10.3 构造函数‖析构函数

Posted: March 27, 2011 in C++

/*
初始化变量,即 int a=1; 变量a被初始化为1.
那么如何才能初始化 类(class) 中的 成员函数 呢?
就需要用到 构造函数(constructor) 和 析构函数(destructor).

构造函数可以根据需要接受参数, 但他不能有返回值(void也不能),
构造函数是一个与类同名的类方法.声明构造函数后,还应声明析构函数.

构造函数创建并初始化类对象,
而析构函数在对象被销毁后完成清理工作并释放分配的资源和内存.
析构函数与类同名,但在前面加上了一个 ~ .

析构函数没有参数,也没有返回值. 如: ~Cat();

如果没有创建构造函数和析构函数,编译器提供一个默认的构造函数与析构函数,且不接受任何参数.
如果希望它们执行一些操作,必须创建自己的默认构造函数或析构函数.

那为什么要创建构造函数呢?
它可以初始化成员变量.

如果生命了一个构造函数,就要再生命析构函数.

比如,使用一个非默认构造函数来初始化Cat对象,将其年龄设置为您提供的年龄.
*/

#include <iostream>

using namespace std;

class Cat
{
private:
          int itsAge;

public:
          Cat(int initialAge);//初始化Cat的一个参数
          ~Cat();//释放构造函数的资源和内存
          int GetAge();
          void SetAge(int age);
};

Cat::Cat(int initialAge)
{
          itsAge=initialAge;//将初始化的值付给Cat itsAge
}

Cat::~Cat(){}//析构函数,无任何操作

int Cat::GetAge()
{
          return itsAge;
}

void Cat::SetAge(int age)
{
          itsAge=age;
}

void main()
{
          Cat Frisky(5); //初始化其值为5.
          cout<<“The Frisky is “<<Frisky.GetAge()<<endl;//在没给使用存取器函数之前已通过构造函数赋值(即初始化成员变量)
          Frisky.SetAge(7);
          cout<<“The brother of Frisky is “<<Frisky.GetAge()<<endl;
}

/*
如果构造函数根本不接受参数(即:它是默认构造函数),应去掉括号:
Cat Frisky;
这行代码,将被解释为调用默认构造函数,没有提供任何参数,因此将括号省略.

当然构造函数本身也可接受多个参数,比如
Cat(int InitialAge, int InitialWeight );~Cat();

Cat(5,100);
*/

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s