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之后出现很多新的知识点.这些知 ...
随机推荐
- 基于rsync方式的文件备份
rsync 是一个快速增量文件传输工具,它可以用于在同一主机备份内部的备分,我们还可以把它作为不同主机网络备份工具之用.本文主要讲述的是如何自架rsync服 务器,以实现文件传输.备份和镜像.相对ta ...
- C和指针之学习笔记(5)
第10章 使用结构和指针 单链表 typedef struct NODE { struct NODE *link; int value; } Node; 插入到一个有序单链表: #include< ...
- [BJOI2017]魔法咒语 --- AC自动机 + 矩阵优化
bzoj 4860 LOJ2180 洛谷P3175 [BJOI2017]魔法咒语 题目描述: Chandra 是一个魔法天才. 从一岁时接受火之教会洗礼之后,Chandra 就显示出对火元素无 ...
- [Codeforces 1060F] Shrinking Tree
Link: 传送门 Solution: 原来CF的官方题解也能鸽啊…… 详细题解 该题思路: 1.对于每个点删边方案数为$fac[n-1]$,总贡献为每种方案下满足的概率的和,接下来直接求贡献 2.每 ...
- 快速排序-C
#include <stdio.h> #include <stdlib.h> #define N 6 int partition(int arr[], int low, int ...
- ElasticSearch学习笔记--1、安装以及运行
Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎,多的我就不细说了. 相关实验环境 Centos:7.3 ElasticSearch:5.6 java:1.8 1. ...
- bzoj1634护花
试题描述: 约翰留下他的N(N<=100000)只奶牛上山采木.他离开的时候,她们像往常一样悠闲地在草场里吃草.可是,当他回来的时候,他看到了一幕惨剧:牛们正躲在他的花园里,啃食着他心爱的美丽花 ...
- [转]应用服务器ApacheSocketUnixthread
HttpClient容易忽视的细节——连接关闭 博客分类: java HttpClient client = new HttpClient(); HttpMethod method = new G ...
- 51nod 1010 只包含因子2 3 5的数 打表
只包含因子2 3 5的数 题目连接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1010 Description K的 ...
- CDOJ 1294 天行廖的游戏 dp 容斥
天行廖的游戏 题目连接: http://acm.uestc.edu.cn/#/problem/show/1294 Description 天行健,君子以自强不息.地势坤,廖爷以厚德载物 一日在喵哈哈村 ...