1)缺省构造函数
class TestClass
{
public TestClass(): base() {}
}
上面已介绍 , 它由系统(CLR)提供 。
更多内容请参照以下网页
一共有三页
4. 这个程序里的析构函数怎么写 #include class Teacher{public: char *p_Name; int Number,Classroom,Money; int Phone; Teacher(int number,char*name,int classroom,int phone) { Number=number; Classroom=classroom; Phone=phone; //p_Name=name; p_Name = new char[strlen(name)+1]; // 分配空间 strcpy(p_Name, name); } ~Teacher() { if(p_Name) // 析构函数中释放动态分配的内存 delete [] p_Name; }//这里 Teacher(const Teacher& T){ Number=T.Number; Classroom=T.Classroom; Phone=T.Phone; //p_Name=T.p_Name; p_Name = new char[strlen(T.p_Name)+1]; // 分配空间 strcpy(p_Name, T.p_Name); } void salary(int);};void Teacher::salary(int money){ Money=5000;}class Student{public: int Number,Class; char*p_Name; Student(int number,int _class,char*name){ Number=number; Class=_class; // p_Name=name; p_Name = new char[strlen(name)+1]; strcpy(p_Name, name); } ~Student() { if(p_Name) delete [] p_Name; }//这里}; 。
5. C/C++析构函数 析构函数的作用是对类对象进行内存回收(即声明了该内存空间可以被其他程序使用了!) , 显示调用析构函数只会执行你设计的析构函数的功能(也就是上诉括号里的 , 声明被析构成员的内存空间可以被其他程序所使用了 。) , 但是不会真正意义上析构掉对象 , 要析构掉对象 , 只有当且仅当对象的生命周期结束时 , 由系统操作系统回收对象的内存!这同其他的变量一样 , 当生命周期结束时 , 才会被回收内存空间!
另外 , 为什么显示调用析构函数后 , 能然可以访问被析构了的类成员呢?(假如你的类中有个使用malloc分配空间的成员 , 然后析构函数中使用free掉他 。)因为 , free的作用是声明该内存空间可以被其他程序所用 , 而不是隔断变量地址至物理内存的映射(程序虚拟内存空间至物理内存空间的映射) , 即这种映射关系并不会因为free的影响而断开 , 所以free后能然访问那片内存空间 , 但是实际上 , 那片内存空间已经不是你的程序所私有的了 , 而是被系统标记为未分配出去的空间 。
所以综上所述 , 调用了析构函数后 , 却能然可以访问被析构了的成员这个假象造成了我们认为显示调用析构函数没用!
以上的观点属于个人结论 , 而且现在没有机器做实验 , 不知道说的是对是错 , 请楼主自行斟酌 。
6. 析构函数怎么用 摘 要:构造函数与析构函数是一个类中看似较为简单的两类函数 , 但在实际运用过程中总会出现一些意想不到的运行错误 。
本文将较系统的介绍构造函数与析构函数的原理及在C#中的运用 , 以及在使用过程中需要注意的若干事项 。关键字:构造函数;析构函数;垃圾回收器;非托管资源;托管资源 一.构造函数与析构函数的原理 作为比C更先进的语言 , C#提供了更好的机制来增强程序的安全性 。
C#编译器具有严格的类型安全检查功能 , 它几乎能找出程序中所有的语法问题 , 这的确帮了程序员的大忙 。但是程序通过了编译检查并不表示错误已经不存在了 , 在“错误”的大家庭里 , “语法错误”的地位只能算是冰山一角 。
级别高的错误通常隐藏得很深 , 不容易发现 。根据经验 , 不少难以察觉的程序错误是由于变量没有被正确初始化或清除造成的 , 而初始化和清除工作很容易被人遗忘 。