本文地址: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 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)

    为什么是webpack webpack一下自己就

  2. Shiro的鉴权方式

    一. 怎么用 Shiro 支持三种方式的授权 编程式:通过写 if/else 授权代码块完成: Subject subject = SecurityUtils.getSubject(); if(sub ...

  3. logging记录日志

    日志是一个系统的重要组成部分,用以记录用户操作.系统运行状态和错误信息.日志记录的好坏直接关系到系统出现问题时定位的速度.logging模块Python2.3版本开始成为Python标准库的一部分. ...

  4. BZOJ1017 魔兽地图DotR (树上背包)

    一道背包的神题,用到了树上dp和背包dp,这个题的特殊性在于儿子对于父亲节点是有影响的,所以用f[i][j][k]表示第i号装备,其中用j个来合成上层装备,花费k元所能获得最大的力量值. 然后对于每一 ...

  5. [BZOJ4627][BeiJing2016]回转寿司(线段树)

    从左到右处理,设到当前数R的前缀和为cnt[i],则以i为右端点的合法的区间左端点j必然是L<=cnt[i]-cnt[j-1]<=R,即cnt[i]-R<=cnt[j-1]<= ...

  6. JZYZOJ1330 土地购买 dp 斜率优化

    不用long long的话只能ac一半的点而且完全查不出来错...放弃cin保平安..   x[i],y[i]分别为第i块土地的长和宽,输入后需要排序然后去掉冗余数据,最后得到的x[i]递增y[i]递 ...

  7. 【DLX算法】poj2676 Sudoku

    DLX算法求解精确覆盖问题模板.赛场上可以参见白书. #include<cstdio> #include<cstring> #include<vector> usi ...

  8. Educational Codeforces Round 10 C. Foe Pairs 水题

    C. Foe Pairs 题目连接: http://www.codeforces.com/contest/652/problem/C Description You are given a permu ...

  9. CROC 2016 - Elimination Round (Rated Unofficial Edition) A. Amity Assessment 水题

    A. Amity Assessment 题目连接: http://www.codeforces.com/contest/655/problem/A Description Bessie the cow ...

  10. PHP大转盘中奖概率算法实例

    本文实例讲述了PHP大转盘中奖概率算法的实现方法,分享给大家供大家参考.具体如下: 大转盘是最近很多线上网动中一个比较有意思的东西了,下面我们就来看看这个大转盘中奖概率算法与例子,希望对各位有所帮助. ...