C++对C的改进(2)
本文地址: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)的更多相关文章
- 120项改进:开源超级爬虫Hawk 2.0 重磅发布!
沙漠君在历时半年,修改无数bug,更新一票新功能后,在今天隆重推出最新改进的超级爬虫Hawk 2.0! 啥?你不知道Hawk干吗用的? 这是采集数据的挖掘机,网络猎杀的重狙!半年多以前,沙漠君写了一篇 ...
- 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)
其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...
- 挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法
转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的 ...
- ITTC数据挖掘平台介绍(四) 框架改进和新功能
本数据挖掘框架在这几个月的时间内,有了进一步的功能增强 一. 超大网络的画布显示虚拟化 如前几节所述,框架采用了三级层次实现,分别是数据,抽象Node和绘图的DataPoint,结构如下: ...
- C# 3.0新语言特性和改进(一)
引言 关于C#3.0的特性,园子里已经有了一大把,可能大家都很熟悉了,虽然本人开发中使用过,但自己还是需要记录一下,总结一下.同时也是后面写Linq知识的基础.希望有兴趣的朋友,可以看看. C# 3. ...
- jqGrid插件getCol方法的一个改进
jgGrid插件是非常常用的一个基于jQuery的表格插件,功能非常强大.我最近也频繁使用.但是这个插件也有一些不够完善的地方.比如这个getCol方法. getCol方法接受三个参数 colname ...
- kaggle入门2——改进特征
1:改进我们的特征 在上一个任务中,我们完成了我们在Kaggle上一个机器学习比赛的第一个比赛提交泰坦尼克号:灾难中的机器学习. 可是我们提交的分数并不是非常高.有三种主要的方法可以让我们能够提高他: ...
- SQL Server 2016中In-Memory OLTP继CTP3之后的新改进
SQL Server 2016中In-Memory OLTP继CTP3之后的新改进 转译自:https://blogs.msdn.microsoft.com/sqlserverstorageengin ...
- Hadoop学习笔记—21.Hadoop2的改进内容简介
Hadoop2相比较于Hadoop1.x来说,HDFS的架构与MapReduce的都有较大的变化,且速度上和可用性上都有了很大的提高,Hadoop2中有两个重要的变更: (1)HDFS的NameNod ...
- Java进击C#——语法之知识点的改进
本章简言 上一章我们讲到关于面向对象思想上C#和JAVA之差别.笔者分别从面向对象的三大特性入手.而本章主要讲一些C#改进的知识点.在.NET Framework 2.0之后出现很多新的知识点.这些知 ...
随机推荐
- JS获取select的value和text值的简单实例
本篇文章主要是对JS获取select的value和text值的简单实例进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 代码如下: <select id = "cityList ...
- Hadamard product
按元素乘积. python中Hadamard product和matrix product的区分: For numpy.ndarray objects, * performs elementwise ...
- Mybatis源码分析之Mapper的创建和获取
Mybatis我们一般都是和Spring一起使用的,它们是怎么融合到一起的,又各自发挥了什么作用? 就拿这个Mapper来说,我们定义了一个接口,声明了一个方法,然后对应的xml写了这个sql语句, ...
- jsp有哪些动作作用分别是什么?
JSP共有以下6种基本动作: jsp:include:在页面被请求的时候引入一个文件. jsp:useBean:寻找或者实例化一个JavaBean. jsp:setProperty:设置JavaBea ...
- 【WIN10】Bind、Binding與Converter的使用
Demo源碼下載:http://yunpan.cn/cHuCmI4NK4xwr 访问密码 8201 1.Bind Bind的使用方式是: <Button Content="{x:Bi ...
- Android UI设计规范之常用单位
px :全称--pixel .像素.例如,480*800的屏幕在横向有320个象素,在纵向有480个象素. 屏幕的分辨率 : 屏幕的长宽方向上像素点的数量. dp(dip) : 全称--Density ...
- bzoj 1051 强连通分量
反建图,计算强连通分量,将每个分量看成一个点,缩点后的图是一个DAG,如果是一棵树,则根代表的连通分量的大小就是答案,否则答案为0. 收获: 图的东西如果不好解决,可以尝试缩点(有向图将每个强连通分量 ...
- 九月回顾 这篇文章和ACM毫无关系= =
其实不只是九月的回顾吧,我大概想把暑假到现在10.01发生的啥事儿都说下吧~ 嗯,我是一个比较沙茶的人,不过运气比较好吧. 高中啊,这个谈起来话就长了,在校什么风采之星大赛上,我认识了个妹子,当时感觉 ...
- 利用BusyBox ~私人定制 My LINUX~
前言 我在今天在这里跟大家详细地探讨一下Linux系统的定制过程和实现例如.用户能够远程登录:和Nginx能够稳定地运行在我们私人定制的LINUX系统上.一步一步从头开始定制属于我们自己的系统. 正文 ...
- 两个不同网段的PC直连是否可以Ping通,肯定可以Ping的通(转)
在这一篇文章中http://blog.csdn.net/zhangdaisylove/article/details/46892917的案例,明确的说明两个不同网段的PC不能Ping的通,其实他给出的 ...