构造函数是一种特殊的方法主要用来在创建对象时初始化对象即为对象成员变量赋初始值总与new运算符一起使用,在创建对象的语句中特别的一个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同来区分它们即构造函数的重载。
1、构造函数的命名必须和类名完全相同;而一般方法则不能和类名相同。
2、构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。而其他方法都有返回值。即使是void返回值,尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的。
3、构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用,一般方法在程序执行到它的时候被调用。
4、当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数。此默认构造函数是不带参数的。而一般方法不存在这一特点。
5、当一个类只定义了私有的构造函数,将无法通过new关键字来创建其对象,当一个类没有定义任何构造函数,C#编译器会为其自动生成一个默认的无参的构造函数。
C++的构造函数定义格式为:构造函数
class<类名>
public:
<类名>(参数表)
//...(还可以声明其它成员函数)
<类名>::<类名>(参数表)
//函数体
如以下定义是合法的:
class T
public:
T(int a=0){i=a;}//构造函数允许直接写在类定义内,也允许有参数表。
private:int i;
当程序中没有析构函数时,系统会自动生成以下构造函数:
<类名>::<类名>(){},即不执行任何操作。
//注意若将本代码直接复制进编译器,可能会报错,原因是网页生成时会在代码前加一个中文占位符
//最好将代码再写一次
#include
using namespace std;
class time
public:
time() //constructor.构造函数
hour=0;
minute=0;
sec=0;
void set_time();
void show_time();
private:
int hour;
int minute;
int sec;
int main();
class time t1;
t1.show_time();
t1.set_time();
t1.show_time();
return 0;
void time::set_time()
cin >>hour;
cin >>minute;
cin >>sec;
void time::show_time()
{ cout<}
程序运行情况:
0:0:0
10 11 11 回车
10:11:11
任何时候,只要创建类或结构,就会调用它的构造函数。类或结构可能有多个接受不同参数的构造函数。构造函数使得程序员可设置默认值、限制实例化以及编写灵活且便于阅读的代码。
JAVA示例代码:
public class UserManagerImpl implements UserManager
private UserDao userDao;
public UserManagerImpl(UserDao userDao)
this.userDao=userDao;
public void save(String username,String password)
this.userDao.save(username, password);
PHP中的构造函数
构造函数的声明与其它操作的声明一样,只是其名称必须是两个下划线__construct( )。这是PHP5中的变化;PHP4的版本中,构造函数的名称必须与类名相同。为了向下兼容,如果一个类中没有名为__construct( )的方法,PHP将搜索一个与类名相同的方法。
格式:function __construct ( [参数] ) { ... ... }
例子:
class person{
public $name;
public $age;
function _ _construct(){ // 构造函数
$this->name="lisi";
$this->age=28;
function say()
echo "my name is ".$this->name."
echo "my age is ".$this->age."
$per=new person();
$per->say();
$per->name="zhangsan";
$per->age=26;
$per->say();
C#例子
构造函数是在创建给定类型的对象时执行的类方法。构造函数具有与类相同的名称,它通常初始化新对象的数据成员。
在下面的示例中,使用一个简单的构造函数定义了名为Taxi的类。然后使用new运算符来实例化该类。在为新对象分配内存之后,new运算符立即调用Taxi构造函数。
public class Taxi{ public bool isInitialized; public Taxi() { isInitialized = true; }}class TestTaxi{ static void Main() { Taxi t = new Taxi(); System.Console.WriteLine(t.isInitialized); }}
void __construct ( [mixed args [, ...]] )
php 5 允行开发者在一个类中定义一个方法作为构造函数。具有构造函数的类会在每次创建对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。
注:如果子类中定义了构造函数则不会暗中调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用parent::__construct()。
例子 19-6. 使用新标准的构造函数
class BaseClass
function __construct()
print "In BaseClass constructor
class SubClass extends BaseClass
function __construct()
parent::__construct();
print "In SubClass constructor/n";
$obj = new BaseClass();
$obj = new SubClass(); ?>
为了实现向后兼容性,如果 php 5 在类中找不到__construct()函数,它就会尝试寻找旧式的构造函数,也就是和类同名的函数。因此唯一会产生兼容性问题的情况是:类中已有一个名为__construct()的方法,但它却又不是构造函数。
void __destruct ( void )
php 5 引入了析构函数的概念,这类似于其它面向对象的语言,如C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
例子 19-7. 析构函数示例
class MyDestructableClass
function __construct()
print "In constructor/n";
$this->name = "MyDestructableClass";
function __destruct()
print "Destroying " . $this->name . "/n";
$obj = new MyDestructableClass();
?>和构造函数一样,父类的析构函数不会被引擎暗中调用。要执行父类的析构函数,必须在子类的析构函数体中显式调用parent::__destruct()。
注:析构函数在脚本关闭时调用,此时所有的头信息已经发出。
注:试图在析构函数中抛出一个异常会导致致命错误。
1、本网站为开放性注册平台,以上所有展示信息均由会员自行提供,内容的真实性、准确性和合法性均由发布会员负责,本网站对此不承担任何法律责任。
2、网站信息如涉嫌违反相关法律规定或侵权,请发邮件至599385753@qq.com删除。