本文地址:http://www.cnblogs.com/archimedes/p/cpp-change2.html,转载请注明源地址

区别一:原型声明的区别

原型声明的概念:
函数要先定义再使用,如果先使用后定义则必须使用原型声明

#include <iostream>
using namespace std;
int main()
{
float add(float x,float y);//原型声明
float a,b,c;
cout << "Please enter a,b:";
cin >> a >> b;
c = add(a, b);
cout << "sum=“ << c << endl;
return ;
}
float add(float x,float y)
{
float z;
z = x+y;
return z;
}

注意:

①声明语句必须加分号!

②位置任意,只是作用域不同

③声明的原因就是告诉编译环境函数参数的个数,类型和顺序

④C和C++中,任何类型的函数先使用后定义都需原型声明!

区别:原型为空的含义不同

void  fun();
void fun(void);

C++:认为两种形式都无参

C:认为第一个可能有多个参数第二个无参

区别二:局部变量定义的位置

区别三:域解析::扩大全局变量的可见范围

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
int sum = ;
int main()
{
int arr[], i;
cout<<"input 3 num:"<<endl;
for(i=; i<; i++)
cin>>arr[i];
int sum = ;
for(i=; i<; i++)
sum += arr[i];
for(i=; i<; i++)
cout<<setw()<<arr[i]<<endl;
cout << "局部sum=" << sum << endl;
::sum += sum;
cout << "全局sum=";
cout << ::sum <<endl;
system("PAUSE");
return ;
}

区别四:带默认参数的函数

含义:形参有初值的函数

#include <iostream>
#include <string>
#include <iomanip>
using namespace std; void fun(int i, int j = , int k = );
int main()
{
fun();
fun(, );
fun(, , );
system("PAUSE");
return ;
} void fun(int i, int j, int k)
{
cout<<"i="<<i
<<" j="<<j
<<" k="<<k
<<endl;
}

注意:

1、有默认参数值的参数必须在参数表的最右端;
int f(int a,int b=0,int c); //×

2、必须在函数调用前将默认值通知编译系统;

3、声明和定义同时给出默认值,有些编译器报错,有些不会。最好只在函数声明时给出默认值;

4、有默认值的形参,调用时给出了实参,则实参值优先

#include <iostream>
using namespace std;
int max(int a, int b, int c=);
int main()
{
int result = ;
result = max(,,);
cout<<result<<endl;
system("PAUSE");
return ;
}
int max(int a, int b, int c)
{
int t;
t = a > b ? a : b;
c = c > t ? c : t;
return c;
}

区别五:内联函数

1、调用方式

2、定义方法:在函数最左端加inline

#include <iostream>
using namespace std;
inline int max(int a, int b, int c);
int main()
{
int i=,j=,k=,m;
m=max(i,j,k);
cout<<"max="<<m<<endl;
system("PAUSE");
return ;
}
int max(int a, int b, int c)
{
int t;
t = a > b ? a : b;
c = c > t ? c : t;
return c;
}

注意:

可在定义和声明函数时同时写inline,也可在一处写inline

只将规模很小且使用频繁的函数定义成内联函数

内联函数中不能包含复杂的控制语句

对函数作inline声明是建议性的,并非一经指定为inline就一定当内联函数处理

总之规模小,使用频繁的函数适合作为inline

类内定义的成员函数都将理解为inline,前面无需加inline

类内声明,类外定义的函数默认并非inline

区别五:函数重载

重载的前提:发生在同一个作用域中的才是重载
因为C++中函数中局部声明的名字将屏蔽在全局作用域内声明的名字!

#include <iostream>
using namespace std; int square(int x)
{
return x*x;
}
float square(float x)
{
return x*x;
}
double square(double x=1.5)
{
return x*x;
}
int main()
{
cout<<"square()"
<<square()<<endl;
cout<<"square(10)"
<<square()<<endl;
cout<<"square(2.5f)"
<<square(2.5f)<<endl;
cout<<"square(1.1)"
<<square(1.1)<<endl;
system("PAUSE");
return ;
}

注意:

①重载函数的参数个数,参数类型,参数顺序3者中必须至少有一种不同,返回值不同不作为重载依据

②重载函数的功能应该相近

③main()函数不能重载

④参数类型最好保证一致,不一致会自动转换但转换不成功会报错

⑤重载与有默认值的函数一起用,可能产生二义性
#include <iostream>
using namespace std; int fun(int x, int y=)
{
return x*y;
}
int fun(int x)
{
return x;
}
int main()
{
fun();//error:对重载函数的调用不明确 system("PAUSE");
return ;
}

C++对C的改进(2)的更多相关文章

  1. 120项改进:开源超级爬虫Hawk 2.0 重磅发布!

    沙漠君在历时半年,修改无数bug,更新一票新功能后,在今天隆重推出最新改进的超级爬虫Hawk 2.0! 啥?你不知道Hawk干吗用的? 这是采集数据的挖掘机,网络猎杀的重狙!半年多以前,沙漠君写了一篇 ...

  2. 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)

    其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...

  3. 挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法

    转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的 ...

  4. ITTC数据挖掘平台介绍(四) 框架改进和新功能

    本数据挖掘框架在这几个月的时间内,有了进一步的功能增强 一. 超大网络的画布显示虚拟化     如前几节所述,框架采用了三级层次实现,分别是数据,抽象Node和绘图的DataPoint,结构如下:   ...

  5. C# 3.0新语言特性和改进(一)

    引言 关于C#3.0的特性,园子里已经有了一大把,可能大家都很熟悉了,虽然本人开发中使用过,但自己还是需要记录一下,总结一下.同时也是后面写Linq知识的基础.希望有兴趣的朋友,可以看看. C# 3. ...

  6. jqGrid插件getCol方法的一个改进

    jgGrid插件是非常常用的一个基于jQuery的表格插件,功能非常强大.我最近也频繁使用.但是这个插件也有一些不够完善的地方.比如这个getCol方法. getCol方法接受三个参数 colname ...

  7. kaggle入门2——改进特征

    1:改进我们的特征 在上一个任务中,我们完成了我们在Kaggle上一个机器学习比赛的第一个比赛提交泰坦尼克号:灾难中的机器学习. 可是我们提交的分数并不是非常高.有三种主要的方法可以让我们能够提高他: ...

  8. SQL Server 2016中In-Memory OLTP继CTP3之后的新改进

    SQL Server 2016中In-Memory OLTP继CTP3之后的新改进 转译自:https://blogs.msdn.microsoft.com/sqlserverstorageengin ...

  9. Hadoop学习笔记—21.Hadoop2的改进内容简介

    Hadoop2相比较于Hadoop1.x来说,HDFS的架构与MapReduce的都有较大的变化,且速度上和可用性上都有了很大的提高,Hadoop2中有两个重要的变更: (1)HDFS的NameNod ...

  10. Java进击C#——语法之知识点的改进

    本章简言 上一章我们讲到关于面向对象思想上C#和JAVA之差别.笔者分别从面向对象的三大特性入手.而本章主要讲一些C#改进的知识点.在.NET Framework 2.0之后出现很多新的知识点.这些知 ...

随机推荐

  1. Webpack, VSCode 和 Babel 组件模块导入别名

    很多时候我们使用别人的库,都是通过 npm install,再简单的引入,就可以使用了.     1 2 import React from 'react' import { connect } fr ...

  2. [Codeforces166B]Polygons 凸包

    大致题意: 给你一个凸多边形A,和一个任意多边形B,判断B是否在A的内部 先对A的点集建凸包,然后枚举B中的点,二分判断是否在A的内部. 二分时可用叉积判断,详细见代码 #include<cst ...

  3. hihocoder 1490 Tree Restoration

    构造. 从最后一层开始往上构造.最后一层肯定都是叶子结点,距离为2的肯定是同一个父亲,确定好了父亲之后,可以确定上一层每个节点之间的距离,以及上一层每个节点到还未确定的叶子节点之间的距离. #incl ...

  4. 在ASP.NET中实现图片、视频文件上传方式

    一.图片 1.在前端用<asp:FileUpload ID="UpImgName" runat="server"/>控件 2.在后台.cs中写上 p ...

  5. 如何在SpringBoot当中上传多个图片或者上传单个图片 工具类

    如何在SpringBoot当中上传多个图片[上传多个图片 ] 附赠工具类 1.SpringBoot 上传图片工具类 public class SpringUploadUtil { /*** * 上传图 ...

  6. redis的原子性

    什么是原子性操作 在多进程(线程)访问共享资源时,能够确保所有其他的进程(线程)都不在同一时间内访问相同的资源,(要么完全执行,要么完全不执行) 简单描述 有个变量X=0,要进行+1操作,步骤如下: ...

  7. java开发_数字转换汉语中人民币的大写_完整版

    做这个应用,源于突然的一个想法:看到发票上面的数字要转换成汉语中人民币的大写 于是就有了下面的这些事儿..... 先看看运行效果: ================================== ...

  8. Codeforces Beta Round #6 (Div. 2 Only) A. Triangle 水题

    A. Triangle 题目连接: http://codeforces.com/contest/6/problem/A Description Johnny has a younger sister ...

  9. Eclipse打开.class文件

    1.准备材料 jad.exe    下载地址  https://varaneckas.com/jad/,根据系统去选择(就当是废话)  下载下来的是jad158g.win.zip压缩文件,解压后有个j ...

  10. WEB安全扫描器Netsparker推荐给大家

    Netsparker是一款综合型的web应用安全漏洞扫描工具,它分为专业版和免费版,免费版的功能也比较强大. Netsparker与其他综合 性的web应用安全扫描工具相比的一个特点是它能够更好的检测 ...