`
fdyang
  • 浏览: 79809 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Return to the Basic - 构造函数(Constructor),析构函数(Destuctor)

 
阅读更多
通过构造函数,使对象在创建时就可以对自身进行初始化。
- 构造函数名和类名相同。
- 构造函数是没有返回类型的。(C++中,不需要返回值. 用 void 返回类型也不行)
class queue{
	int q[20];
	int front,rear;
public:
	queue(); //构造函数
	void qput(int i);
	int qget():
};

queue::queue(){
	front=rear=0;
	cout<<"Queue is initialized.\n";
}


通过析构函数来销毁对象。
- 析构函数的名和类名相同,但是多了个~(取反)符号。
- 也没有返回类型。

- 析构函数不能带参数。(在销毁对象的时候,没有办法将参数值传递给析构函数)

class queue{
	int q[20];
	int front,rear;
public:
	queue(); //构造函数
	~queue(); //析构函数
	void qput(int i);
	int qget():
};

queue::queue(){
	front=rear=0;
	cout<<"Queue is initialized.\n";
}

queue::~queue(){
	cout<<"Queue is destroyed.\n";
}

构造函数参数化
- 创建对象的时候,为对象的成员变量设定初始值。

class queue{  
    int q[20];  
    int front,rear;  
    int myid;  //保存队列的ID值.
public:  
    queue(int id); //给构造函数传递参数
    ~queue(); //析构函数   
    void qput(int i);  
    int qget():  
};  queue::queue(int id){
    front=rear=0;
    myid=id;
    cout<<"Queue"<<myid<<" is initialized.\n";
}


传递参数给构造函数,需要声明对象时给对象一个参数
第一种方法:

queue q1=queue(5);

第二种方法:(常用)

queue q1(5); 

通用形式:

class-type var(arg-list);  //arg-list是传递给构造函数的参数列表,以逗号分隔.

完整代码:

#include <iostream>
using namespace std;

//创建类queue
class queue{
	int q[20];
	int front,rear; 
	int myid;
public:
	queue(int id); //参数化构造函数
	~queue(); //析构函数
	void qput(int i);
	int qget();
};

queue::queue(int id){
	front=rear=0;
	myid=id;
	cout<<"Queue"<<myid<<" is initialized.\n";
}

queue::~queue(){
	cout<<"Queue"<<myid<<" is destroyed.\n";
}


//在队尾插入一个整数
void queue::qput(int i){  
   if(rear==20){
    cout<<"Queue is full.\n";
    return;
   }
   rear++;
   q[rear]=i; 
}

//在队首取出一个整数
int queue::qget(){
 if(front==rear){
  cout<<"Queue underflow.\n";
  return 0;
 }
 front++;
 return q[front];
}

int main(){
 queue q1(1),q2(2);  //创建2个queue 对象(object),并传递参数

 q1.qput(15);
 q2.qput(18);

 q1.qput(25);
 q2.qput(28);

 cout<<"Queue q1: ";
 cout<<q1.qget()<<" ";
 cout<<q1.qget()<<"\n";

 cout<<"Queue q2: ";
 cout<<q2.qget()<<" ";
 cout<<q2.qget()<<"\n";
 

 return 0;
}


输出结果:

Queue1 is initialized.

Queue2 is initialized.

Queue q1: 15 25

Queue q2: 18 28

Queue2 is destroyed.

Queue1 is destroyed.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics