参考《C#编程指南》
类是否用 static 来修饰,有两种,一种是用static修饰,一种则不是。
对于前者,如果,类提供了一个无参数的构造函数,那么new 实例化对象时候,就会调用这个无参数的构造函数(也叫默认构造函数)
,如果,类提供了一个有参数的构造函数,但是new时候,依然没有提供参数,那么情况是怎么样? 显然,是调用系统提供的一个构造函数。
综上, new实例化对象,不提参数,则调用默认构造函数。那么对于C++,是否成立? 也是成立的。
做个试验:
class Person
{
int age;
int sex; //sex:1是男人,0是女人
public Person()
{
Console.WriteLine("调用了Person()");
}
public Person(int age, int sex)
{
this.age = age;
this.sex = sex;
Console.WriteLine("调用了有参数的构造函数");
}
}
以下是调用代码:
Person person = new Person();
Person person2 = new Person(23, 1);
结果为:
调用了Person()
调用了有参数的构造函数
现在再做个试验,把我提供的默认构造函数注视掉,看结果是什么?
结果报错,提示:必须重载无参数的构造函数。
接着,在此基础上,把有参数的构造函数注视掉,看结果如何?
是可以通过的,!!!!!!!
“类提供了一个有参数的构造函数,但是new时候,依然没有提供参数,那么情况是怎么样? 显然,是调用系统提供的一个构造函数。”
这一话是有问题的!!! 如果你的类提供了一个有参数的构造函数,那么请你也提供一个无参数的构造函数(默认构造函数),
否则,用new实例化对象时(必须带参数)。
另外:如果一个构造函数都不提供,那么是会调用系统提供的。
那么结构体呢? 有了类,为什么要用结构体? 记那么多语法,很烦人。。。。。。。。。
另外:自己提供的构造函数,如果没有初始化类中的数据,那么会被用默认的值来初始化,比如:int :0 ,string :NULL .
建议不要这样, 另外,如果涉及到聚合的时候,类中包含了另外一个对象,那么这样会很麻烦。编译器就不知道该提供默认值了。