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之后出现很多新的知识点.这些知 ...
随机推荐
- cordova 导致css中绝对定位top:0会被顶到视图之外
IOS7+ webview全屏导致状态栏悬浮在页面上 解决方案:打开 ios项目/classes/MainViewController.m,修改viewWillAppear方法 - (void)vie ...
- 【WPF】Behavior的使用
如何将一个行为附加到某个元素上呢?我们可以通过自定义一个Behavior! 我们首先看一下IAttachedObject接口,Behavior默认继承之这个接口 // 摘要: // 供可以附加到另一个 ...
- Mac 命令行美化
在 mac 中使用原生的命令行工具,竟然没有 git 命令的自动补全,在 git 仓库下也看不到当前的分支名,不能忍.于是,开始一波改造. 目标:命名 Tab 自动补全:可以显示分支名: 一番 Goo ...
- Java常用工具类之MD5加密
package com.wazn.learn.util; import java.security.MessageDigest; /** * MD5加密工具类 * <功能详细描述> * * ...
- Ubuntu下修改ubuntu源,完成Redis Desktop Manager的安装
原文地址: http://blog.csdn.net/u013410747/article/details/51706964 免费下载链接:http://pan.baidu.com/s/1cA3jWU ...
- 【BZOJ 1880】 [Sdoi2009]Elaxia的路线 (最短路树)
1880: [Sdoi2009]Elaxia的路线 Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. ...
- [BZOJ 4719] 天天爱跑步
Link: BZOJ 4719 传送门 Solution: 感觉求LCA又有了新姿势啊:$Tarjan$离线$O(n+m)$ 每次递归返回时将子树和父节点合并,如果询问节点已访问过则LCA就是已合并的 ...
- loj117 有源汇有上下界最小流
link 题意&题解 code: #include<bits/stdc++.h> #define rep(i,x,y) for (int i=(x);i<=(y);i++) ...
- 【洛谷】2990:[USACO10OPEN]牛跳房子Cow Hopscotch【单调队列优化DP】
P2990 [USACO10OPEN]牛跳房子Cow Hopscotch 题目描述 The cows have reverted to their childhood and are playing ...
- [bzoj1016][JSOI2008]最小生成树计数 (Kruskal + Matrix Tree 定理)
Description 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的 ...