构造函数 - 简介
构造函数 是一种特殊的方法 主要用来在创建对象时初始化对象 即为对象成员变量赋初始值
总与new运算符一起使用在创建对象的语句中 特别的一个类可以有多个构造函数 可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载
构造函数 - 构造函数与其他方法的区别
1构造函数的命名必须和类名完全相同;而一般方法则不能和类名相同
2构造函数的功能主要用于在类的对象创建时定义初始化的状态它没有返回值,也不能用void来修饰这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择而其他方法都有返回值即使是void返回值,尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的
3构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用,一般方法在程序执行到它的时候被调用
4当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数此默认构造函数是不带参数的而一般方法不存在这一特点
5当一个类只定义了私有的构造函数,将无法通过new关键字来创建其对象,当一个类没有定义任何构造函数,C#编译器会为其自动生成一个默认的无参的构造函数。
构造函数 - C++中的构造函数
C++的构造函数定义格式为: 构造函数
class <类名>
{
public:
<类名>(参数表)
//(还可以声明其它成员函数)
};
<类名>::<类名>(参数表)
{
//函数体
}
如以下定义是合法的:
class T
{
public:
T(int a=0){i=a;}//构造函数允许直接写在类定义内,也允许有参数表。
private:int i;
};
当程序中没有析构函数时,系统会自动生成以下构造函数:
<类名>::<类名>(){},即不执行任何 *** 作。
构造函数 - C++例子
//注意若将本代码直接复制进编译器,可能会报错,原因是网页生成时会在代码前加一个中文占位符
//最好将代码再写一次
#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;
t1show_time();
t1set_time();
t1show_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){
thisuserDao=userDao;
}
public void save(String username,String password){
thisuserDaosave(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(); SystemConsoleWriteLine(tisInitialized); }}
区别:
1如果在创建对象时不写参数,调用的就是无参的构造方法。可是如果你写的有有参的构造方法,而没有无参的构造方法,那么再“创建对象时不写参数”就会报错,程序会认为你知道该怎么做。
如果构造方法有参数,在创建对象时传入了参数,那么就会调用此方法,这一点和重载类似。
2没有参数的构造函数就是默认构造函数。
有参数的构造函数可用传递的参数给类中的属性赋初始值或执行初始化 *** 作例如订阅事件等。
构造函数是在创建给定类型的对象时执行的类方法。构造函数具有与类相同的名称,它通常初始化新对象的数据成员。
任何时候,只要创建类或结构,就会调用它的构造函数。类或结构可能有多个接受不同参数的构造函数。构造函数使得程序员可设置默认值、限制实例化以及编写灵活且便于阅读的代码。
如果没有为对象提供构造函数,则默认情况下 C# 将创建一个构造函数,该构造函数实例化对象,并将所有成员变量设置系统指定的默认值。静态类和结构也可以有构造函数。
扩展资料主要特点
1构造函数的命名必须和类名完全相同。在java中普通函数可以和构造函数同名,但是必须带有返回值;
2构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。而其他方法都有返回值,即使是void返回值。尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的;
3构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的;
4当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数此默认构造函数是不带参数的。而一般的方法不存在这一特点;
5构造函数有回滚的效果,构造函数抛出异常时,构造的是一个不完整对象,会回滚,将此不完整对象的成员释放(c++)
6当一个类只定义了私有的构造函数,将无法通过new关键字来创建其对象,当一个类没有定义任何构造函数,C#编译器会为其自动生成一个默认的无参的构造函数。
参考资料:
有关构造函数说法不正确的是:在一个类中构造函数有且仅有一个。
构造函数 是一种特殊的方法 主要用来在创建对象时初始化对象 即为对象成员变量赋初始值
总与new运算符一起使用在创建对象的语句中 特别的一个类可以有多个构造函数 可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载
构造函数 - 构造函数与其他方法的区别
1、构造函数的命名必须和类名完全相同;而一般方法则不能和类名相同
2构造函数的功能主要用于在类的对象创建时定义初始化的状态它没有返回值,也不能用void来修饰这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择而其他方法都有返回值即使是void返回值,尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的
3构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用,一般方法在程序执行到它的时候被调用
4当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数此默认构造函数是不带参数的而一般方法不存在这一特点
静态构造函数具有以下特点:
1、静态构造函数既没有访问修饰符,也没有参数。
2、在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。
3、无法直接调用静态构造函数。
4、在程序中,用户无法控制何时执行静态构造函数。
5、静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件中写入项。
6、静态构造函数在为非托管代码创建包装类时也很有用,此时该构造函数可以调用
LoadLibrary
方法。
7、如果静态构造函数引发异常,运行时将不会再次调用该构造函数,并且在程序运行所在的应用程序域的生存期内,类型将保持未初始化。代码示例:
namespace
Demo
{
class
UserPreferences
{
public
static
readonly
Color
BackColor;
//声明类的静态成员
static
UserPreferences()
//构造静态函数
{
DateTime
now
=
DateTimeNow;
if(nowDayOfWeek
==
DayOfWeekSaturday
||
nowDayOfWeek
==
DayOfWeekSunday)
BackColor
=
ColorGreen;
else
BackColor
=
ColorRed;
}
private
UserPreferences()
{
}
}
class
Program
{
static
void
Main(string[]
args)
{
ConsoleWriteLine("UserPreferences:BackColor
is:"
+
UserPreferencesBackColorToString());
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)