您的位置 首页 java

2.5构造函数和析构函数

构造函数 析构函数 是两个特殊的成员函数,这个函数的名字和类名相同, 构造函数 定义对象的时候由系统自动调用,析构函数在删除对象的时候由系统自动调用。

2.5.1 构造函数的概念

在使用表达式“new”创建类对象时。系统会自动调用该类的构造函数,完成类对象数据成员的初始化, 其声明格式为“<函数名>(<参数列表>)” 需要注意的是,构造函数的名称必须与类名称相同。构造函数没有返回值,所以不能返回类型,构造函数不能被声明为 const 类型。任何类都最少有一个构造函数,如果程序不提供构造函数,系统则提供一个默认的构函数,默认的构造函数不带任何参数。构造函数的定义和使用方法如程序 212.cpp所示。

 //案例名称: 构造函数的概念
//程序名称:212. CPP 
#  include <iostream>
using namespace std;
class Tdate
{
 private :
int month;
public:
Tdate()
{
 cout <<"自动调用构造函数"<<endl;
}
};
 void  main()
Tdate * b=new Tdate();
delete b;
}  

程序执行的结果如图 2-12所示。

图2-23 执行结果

程序解释:

可以看出在使用“new”创建对象的时候,自动调用了构造函数“Tdate()”,构造函数只能定义成“public”类型的,不能定义成“private”类型的,否则出现编译错误。

2.5.2 析构函数的概念

析构函数 也是一个特殊的成员函数,当删除一个类对象的时候,会被系统自动调用。析构函数并不是必需的。析构函数的函数名和类名相同,并在前面加一个 波浪号 “~”,没有任何参数,不返回任何值,声明格式为:“~函数名>()”。使用方法如程序213.cpp所示。

 //案例名称:析构函数的使用
//程序名称: proj2 13,CPP
# include<iostream>
using namespace std;
class Tdate
  {
  private:
  int month;
  public:
    Tdate()
      {
      cout<<"自动调用构造函数”<<endl;
      }
    ~Tdate()
      {
      cout<<"自动调用析构函数"<<endl;
      }
  };
void main()
{
Tdate * b=new Tdate();
delete b;
}  

程序执行的结果如图2-24 所示

2.5构造函数和析构函数

图2-24 执行结果

2.5.3 带参数的构造函数

创建一个类对象时,系统会自动调用构造函数初始化类对象成员,将实参传递给构造区数的语法为:“person zhangsan(501,”zhangsan”);”。如果在定义类对象时,没有指定实参系统会自动调用 缺省构造函数 ,例如:

person zhangsan (); //错误!

person zhangsan; //正确!系统自动调用缺省构造函数

person * p=new zhangsan();//正确!系统自动调用缺省构造函数

多参数的构造函数如程序 24.cpp 所示。

 //案例名称:构造函数的参数
//程序名称:214.cPP
include<iostream>
using namespace std;
class Tdate
{
private:
int month;
public:
Tdate(int m)
{
a=m
cout<<a<<endl;
}
~Tdate()
{
cout<<"自动调用析构函数"<<endl;
}
};
Int main()
{
Tdate * b=new Tdate(10);
delete b;
}
程序执行的结果如图2-14所示。  
2.5构造函数和析构函数

图2-14 执行结果

2.5.4重载构造函数

构造函数的重载和普通函数的重载概念一致。当参数列表不一致的时候,就构成重载在构造类的时候,通过参数列表去调用不同的构造函数。使用方法如程序 215.cpp所示。

 //案例名称:重载构造函数
//程序名称: proj2 15.CPP
#include<iostream>
using namespace std;
class Tdate
{
private:
int a;
public:
Tdate(int m)
{
a=m;
cout<<a<<endl;
}
Tdate()
{
a=100+250;
cout<<a<<endl;
}
};
int main()
{
Tdate * b=new Tdate(250); //调用 Tdate(int m)函数
delete b;
Tdate * t=new Tdate(); //调用Tdate()
delete t;
}  

程序执行的结果如图2-15所示

图2-15

文章来源:智云一二三科技

文章标题:2.5构造函数和析构函数

文章地址:https://www.zhihuclub.com/200426.shtml

关于作者: 智云科技

热门文章

网站地图