C++-c++什么时候必须自己进行构造函数,什么时候不用自己构造函数,而是用系统给的?
学习c++给整糊涂了,有系统给的为什么还要自己定义个构造函数。老师说当系统给的不能满足需要的时候就必须的自己构造,什么时候才叫不满足呢?换句话说,就是什么时候用系统给的构造函数就可以了,什么时候必须得自己构造函数?求高手指点,真心糊涂了
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
系统给的一般都是各个成员的复制,可能有指针成员的时候就行不通,要自己去定义构造函数
先理顺一下构造函数:
1、构造函数的命名必须和类名完全相同。在java中普通函数可以和构造函数同名,但是必须带有返回值;
2、构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的;
默认构造函数就是在没有显式提供初始化式时调用的构造函数。它由不带参数的构造函数,或者为所有的形参提供默认实参的构造函数定义。如果定义某个类的变量时没有提供初始化式就会使用默认构造函数。
其实关于构造函数的使用,举个例子:
#include <iostream>
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<<hour<<":"<<minute<<":"<<sec<<endl;
}
这里,如果我希望我不设置时间的情况下,直接显示时间它出现的值为你所期望的,这就需要你自己写一个构造函数。也就是说当你的程序需要在被调用时,先自动执行一系列自定义操作时,就需要你自定义构造函数。也就是系统给的构造函数不满足。默认构造函数是不带参数的,完成不了复杂的操作。
个人理解,请多指教。
系统一般总是能给定默认构造函数的,除非你的类的基类或者数据成员是不含默认构造函数的类型——此时如果你不指定基类或者成员的构造参数,编译器无法代你设置。
不考虑上面的情况,默认构造满足不满足需要,全看你想让代码想干什么。
首先,你要了解,默认构造会做什么:在默认情况下,基类和数据成员如果有自定义的无参数构造函数,就会自动执行这些构造函数;而所有的简单类型(系统内置的数值与指针类型)都处于未初始化的状态。如果所有基类、数据成员也都没有自定义的构造函数,同时不存在虚函数和虚继承,编译器优化的结果将根本不生成任何构造函数。
如果上述行为方式已经满足你的需要,你就可以不做初始化。但这在大多数情况下可能不合适:比如你有个指针成员int *p,用来保存运行时动态分配的数据,如果你不在构造的时候把它初始化为NULL,在析构函数里就不知道它的数值是否有效,是否需要释放内存了。
当你有特殊的初始化业务的时候,那肯定是要定义自己的构造函数的。
比方说,部分参数你想拷贝而非引用初始化,等等。。。
等高手补充