非必要不提供默认的构造器(default constructor)

编程原则:一旦编程人员没有为类编写构造函数,编译器将自动提供一个默认的构造函数,默认构造函数具有如下的特点:

1)不带任何的参数,谁知道该带哪些参数

2)函数体为空,谁知道你想干嘛

但是一旦定义了类的构造函数,系统将不再提供默认的构造函数,并且类的实例化必须符合定义的构造函数的参数列表。

简单例子如下:

class T{
public:
    T(int a)
    {

    }
    void DisplayT()
    {
        cout<<"welcome"<<endl;
    }
}; 

int main()
{
      T t;     
      t.DisplayT();
}
错误提示:
no matching function for call to 'T::T()'

目的:不允许任何人实例化没有参数传递进来的类

      思考了好久的问题,仿佛时间在这一刻停止了。该不该,走不走,留不留,说不说。我不知道该不该提供一个默认的构造器,仅仅是为了以后不可预知的继承,当然,如果没有提供,(我的程序注定是垃圾的现在),我的后备可要辛苦一下照顾我的成员变量。
 确实,我应该深刻了解什么是类的初始化构造。构造器Constructor是用来将对象初始化,但是初始化的信息来自哪里,是来自程序员空洞的幻想数据。字符串应该是空的,整型就应该是0,指针就应该是NULL.这就是默认构造函数能够做到的。他没法子和用户交流啊。你明不明白:它没办法传递用户的参数进去,因为没有参数列表。
    数值类的对象,可以很合理的被初始化为0或者一个毫无意义的值。比如数据结构中如Linked lists. bash tables, maps等。可被初始化为空容器。
    现在是一个升级软件的类,好了这个类承担的是与对方主机进行通讯,需要接受用户的输入:地址和端口。该不该提供一个默认的构造器,仅仅是为了飘渺的继承。显然,如果没有用户的正确输入信息,这个类就不能正确完成初始化工作。当然,也可以在链接的时候提供链接的函数参数列表。
需要提供默认构造器的地方:
1.数组式的动态对象生成
2模板的可兼容性
影响:
如果成员函数必须测试字段是否真被初始化了,其调用者便必须为测试行为付出时间代价,并为测试代码付出空间代价。

 

你可能感兴趣的:(构造函数,默认构造函数,默认参数的构造函数)