注册 登录
编程论坛 C++教室

构造函数和析够够函数

wxm198427 发布于 2008-10-24 12:01, 1115 次点击
构造函数和析构函数的作用是什么?什么时候需要自己定义构造函数和析构函数?
9 回复
#2
blueboy820062008-10-24 12:15
构造函数最主要作用就是生成对象和初始化对象。
析构函数的作用与构造函数作用相反,但最主要作用是在对象要完成生命周期时完成清理性工作。
我们几乎总是定义自己的构造函数。。。毕竟,我们要实现自己定义的初始化嘛。。。
那么,由三法则就显然也总要定义相应的析构函数了。。。
其实,你在不知道它们要干什么时,定义体为空就好。。。
#3
newyj2008-10-24 12:19
构造函数 主要是 分配空间 和初始化对象
析构函数 与 构造函数相反
#4
wxm1984272008-10-24 13:47
[bo][un]blueboy82006[/un] 在 2008-10-24 12:15 的发言:[/bo]

构造函数最主要作用就是生成对象和初始化对象。
析构函数的作用与构造函数作用相反,但最主要作用是在对象要完成生命周期时完成清理性工作。
我们几乎总是定义自己的构造函数。。。毕竟,我们要实现自己定义的初始 ...



作用就是生成对象??不太懂,比方我下面的一段程序,你说他怎么就生成了对象?对象不是在下面定义的吗?
#include <iostream>
using namespace std;
class Time
{public:
Time( )                    
{hour=0;                 
minute=0;
sec=0;
}
void set_time( );           
void show_time( );         
private:
int hour;                  
int minute;
int sec;
};
void Time::set_time( )      
{cin>>hour;
cin>>minute;
cin>>sec;
}
void Time::show_time( )        
{
 cout<<hour<<":"<<minute<<":"<<sec<<endl;
}
int main( )
{
Time t1;                  
t1.set_time( );            
t1.show_time( );            
Time t2;                  
t2.show_time( );        
return 0;
}
以上这段程序没有错误,哥们帮我解释在这个程序中怎么就叫做生成对象??真搞不懂,我是菜鸟,请指点…………
#5
xmnathan2008-10-24 14:13
构造函数一般是用来放置定义类中的变量及其初始化的
析构就是把这些定义出来的 特别是指针类型的变量销毁

其他用处雷同
#6
wxm1984272008-10-24 14:18
[bo][un]xmnathan[/un] 在 2008-10-24 14:13 的发言:[/bo]

构造函数一般是用来放置定义类中的变量及其初始化的
析构就是把这些定义出来的 特别是指针类型的变量销毁

其他用处雷同



用来放置定义类中的变量
??那哥们帮我看看上面的程序,你说它是怎么放置的??我不懂…………
#7
newyj2008-10-24 16:33
就是在主函数中 Time t1;实例化是 隐式调用 在类中定义的 构造函数
Time( )                    
{hour=0;                 
minute=0;
sec=0;
}
#8
wxm1984272008-10-24 16:35
噢,谢谢哥们
#9
中学者2008-10-24 18:07
LS的说得貌似都有问题...
构造函数只负责实例化对象(注意: 不一定是初始化,除非你用了初始化列表)..而对象的分配工作是编译器做的..
class A
{
 public:
    A() { i=2; }  //如果调用它,那么i是赋值行为
    A(int i_): i(i_) {}  //调用它,那么是初始化行为
 private:
   int i;
};
析构函数也不会销毁任何变量...它负责的是一些清理工作,例如动态内存的释放,不然就内存泄漏了...
由对象布局的知识我们可以知道,对于栈上分配的对象,也只不过是个集合,通过移动栈指针,就把该对象释放了...
关于构造和析构问题,貌似也有很多知识~~~
#10
newyj2008-10-24 19:07
用初始化列表的好处 是用在 类类型方面 不用 再 调用构造函数了
而对于 内置类型 在初始化列表和在大括号中都是 一样的
1