zoukankan      html  css  js  c++  java
  • C++的函数重载和main函数之外的工作

        今天被问到一个C++的函数重载问题,一下子没反应过来,这种基础的问题竟然忘记了,以下记录一下这些忘记的内容。

        

        函数重载

            函数重载的定义是:在相同的作用域中,如果函数具有相同名字而仅仅是形参表不同,此时成为函数重载。注意函数重载不能基于不同的返回值类型进行重载。

            注意函数重载中的“形参表”不同,是指本质不同,不要被一些表象迷惑。main函数不能被重载。

            下面三组定义本质是相同的,不是重载:

             1)int sum (int &a); 和 int sum (int &);

             2)  int sum (int a) 和 int sum (const int a);

             3)typedef int DD;

             int sum(int a); 和 int sum (DD a);

             其中第二个例子对于非引用传参,形参是否const是等价的。但是当使用引用传参时,有无const是不同的。使用指针传参时,指向const对象的指针和指向非const对象的指针做形参的函数是不同的。

             *下面谈论一个比较恶心的问题,基于const的重载

             在类中会有这样一种重载,它是合法的。

             Class A {

                          int function ();

                          int function () const;

             };

             可以看到在A类中,function函数是发生重载了,而且是合法的。而且在调用时,只用A类的const对象才能调用const版本的function函数,而非const对象可以调用任意一种,通常非const对象调用不是const版本的function函数。

             原因是:按照函数重载的定义,函数名相同而形参表有本质不同的函数称为重载。在类中,由于隐含的this形参的存在,const版本的 function函数使得作为形参的this指针的类型变为指向const对象的指针,而非const版本的使得作为形参的this指针就是正常版本的指 针。此处是发生重载的本质。重载函数在最佳匹配过程中,对于const对象调用的就选取const版本的成员函数,而普通的对象调用就选取非const版 本的成员函数。

             (注:this指针是一个const指针,地址不能改,但能改变其指向的对象或者变量)

    原文:http://blog.sina.com.cn/s/blog_64053138010171rt.html

        今天碰到的另外一个不是很清楚的问题是main函数之外的事情,这个在书中偶尔浏览到过,但是发现具体的记忆不是很清楚了,真悲剧,这里在回顾一下main函数之前和之后所做的工作。

        main函数执行之前,主要就是初始化系统相关资源:
      1.设置栈指针
      2.初始化static静态和global全局变量,即data段的内容
      3.将未初始化部分的赋初值:数值型short,int,long等为0,bool为FALSE,指针为NULL,等等,即.bss段的内容
      4.运行全局构造器,估计是C++中构造函数之类的吧
      5.将main函数的参数,argc,argv等传递给main函数,然后才真正运行main函数

        main函数之后就是做类似的释放资源工作。

        地址:http://blog.csdn.net/gykimo/article/details/8569277

  • 相关阅读:
    各种浏览器(IE,Firefox,Chrome,Opera)COOKIE修改方法[转]
    C#中Socket 和 Tcp 连接的区别
    [转]OpenSSL RSA加解密 (.Net公钥加密/ Linux端私钥解密)
    部分操作系统下的Socket连接数2000到4000左右限制
    安装程序制作软件Inno Setup
    C#中线程占用内存过大解决方法
    Question from one example in Item 5 《Effective C#》
    软件测试基本概念 覆盖率
    C++中的内存管理 (转自:http://www.cnblogs.com/drwilliam/archive/2005/11/12/274937.html)
    Debug DataBinding
  • 原文地址:https://www.cnblogs.com/weixliu/p/3737179.html
Copyright © 2011-2022 走看看