zoukankan      html  css  js  c++  java
  • 构造函数与析构函数的起源

    构造函数与析构函数的起源

    作为比 C 更先进的语言,C++提供了更好的机制来增强程序的安全性。C++编译器 具有严格的类型安全检查功能,它几乎能找出程序中所有的语法问题,这的确帮了程序

    员的大忙。

    但是程序通过了编译检查并不表示错误已经不存在了,在 “错误”的大家庭 里, “语法错误”的地位只能算是小弟弟。级别高的错误通常隐藏得很深,就象狡猾的罪 犯,想逮住他可不容易。 根据经验,不少难以察觉的程序错误是由于变量没有被正确初始化或清除造成的, 而初始化和清除工作很容易被人遗忘。

    Stroustrup 在设计 C++语言时充分考虑了这个问题 并很好地予以解决:把对象的初始化工作放在构造函数中,把清除工作放在析构函数中。 当对象被创建时,构造函数被自动执行。当对象消亡时,析构函数被自动执行。这下就 不用担心忘了对象的初始化和清除工作。 构造函数与析构函数的名字不能随便起,必须让编译器认得出才可以被自动执行。

     Stroustrup 的命名方法既简单又合理:让构造函数、析构函数与类同名,由于析构函数的 目的与构造函数的相反,就加前缀‘~’以示区别。 除了名字外,构造函数与析构函数的另一个特别之处是没有返回值类型,这与返回 值类型为 void 的函数不同。构造函数与析构函数的使命非常明确,就象出生与死亡 ,光 溜溜地来光溜溜地去。如果它们有返回值类型,那么编译器将不知所措。为了防止节外 生枝,干脆规定没有返回值类型。

     1 #include <iostream>
     2 
     3 /* run this program using the console pauser or add your own getch, system("pause") or input loop */
     4 using namespace std;
     5 int main(int argc, char** argv) {
     6        //定义名为list的递归结构  
     7     struct list {
     8           char         name[10];
     9           int          sex;
    10           int          age;
    11           list         *next;   //成员next为指向其自身结构的指针
    12     };
    13 
    14     //使用递归结构变量
    15     list L1={"WeiPing",1,35.5,NULL};
    16     cout<<"L1:"<<endl;
    17     cout<<"name	"<<L1.name<<endl;
    18     cout<<"sex	"<<L1.sex<<endl;
    19     cout<<"age	"<<L1.age<<endl;
    20     cout<<"next	"<<L1.next<<endl;
    21     return 0;
    22 }
  • 相关阅读:
    dubbo源码阅读-服务订阅(八)之本地订阅(injvm)
    dubbo源码阅读-服务订阅(八)之主流程
    dubbo源码阅读-服务暴露(七)之远程暴露(dubbo)
    dubbo源码阅读-配置(二)之API配置
    dubbo源码阅读-容器启动(六)
    LIRe 源代码分析 6:检索(ImageSearcher)[以颜色布局为例]
    LIRe 源代码分析 5:提取特征向量[以颜色布局为例]
    LIRe 源代码分析 4:建立索引(DocumentBuilder)[以颜色布局为例]
    智能电视大战背后的秘密
    二线视频网站突围战
  • 原文地址:https://www.cnblogs.com/borter/p/9406542.html
Copyright © 2011-2022 走看看