C++对C的改进(2)

简介:

区别一:原型声明的区别

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

#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 0;
}
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 = 5050;
int main()
{
    int arr[3], i;
    cout<<"input 3 num:"<<endl;
    for(i=0; i<3; i++)
        cin>>arr[i];
    int sum = 0;
    for(i=0; i<3; i++)
        sum += arr[i];
    for(i=0; i<3; i++)
        cout<<setw(4)<<arr[i]<<endl;
     cout << "局部sum=" << sum      << endl;
    ::sum += sum;
    cout << "全局sum=";
    cout << ::sum <<endl;
    system("PAUSE");
    return 0;
}

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

含义:形参有初值的函数

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

void fun(int i, int j = 5, int k = 10);
int main()
{
    fun(20);
    fun(20, 30);
    fun(20, 30, 40);
    system("PAUSE");
    return 0;
}

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=6);
int main()
{
    int result = 0;
    result = max(3,4,5);
    cout<<result<<endl;
    system("PAUSE");
    return 0;
}
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=10,j=20,k=30,m;
    m=max(i,j,k);
    cout<<"max="<<m<<endl;
    system("PAUSE");
    return 0;
}
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(10)<<endl;
    cout<<"square(2.5f)"
        <<square(2.5f)<<endl;
    cout<<"square(1.1)"
        <<square(1.1)<<endl;
    system("PAUSE");
    return 0;
}

注意:

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

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

③main()函数不能重载

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

⑤重载与有默认值的函数一起用, 可能产生二义性
#include <iostream>
using namespace std;

int fun(int x, int y=10)
{
    return x*y;
}
int fun(int x)
{
    return x;
}
int main()
{
    fun(5);//error:对重载函数的调用不明确
    
    system("PAUSE");
    return 0;
}
目录
相关文章
|
2天前
|
人工智能 自动驾驶 大数据
预告 | 阿里云邀您参加2024中国生成式AI大会上海站,马上报名
大会以“智能跃进 创造无限”为主题,设置主会场峰会、分会场研讨会及展览区,聚焦大模型、AI Infra等热点议题。阿里云智算集群产品解决方案负责人丛培岩将出席并发表《高性能智算集群设计思考与实践》主题演讲。观众报名现已开放。
|
18天前
|
存储 人工智能 弹性计算
阿里云弹性计算_加速计算专场精华概览 | 2024云栖大会回顾
2024年9月19-21日,2024云栖大会在杭州云栖小镇举行,阿里云智能集团资深技术专家、异构计算产品技术负责人王超等多位产品、技术专家,共同带来了题为《AI Infra的前沿技术与应用实践》的专场session。本次专场重点介绍了阿里云AI Infra 产品架构与技术能力,及用户如何使用阿里云灵骏产品进行AI大模型开发、训练和应用。围绕当下大模型训练和推理的技术难点,专家们分享了如何在阿里云上实现稳定、高效、经济的大模型训练,并通过多个客户案例展示了云上大模型训练的显著优势。
|
22天前
|
存储 人工智能 调度
阿里云吴结生:高性能计算持续创新,响应数据+AI时代的多元化负载需求
在数字化转型的大潮中,每家公司都在积极探索如何利用数据驱动业务增长,而AI技术的快速发展更是加速了这一进程。
|
13天前
|
并行计算 前端开发 物联网
全网首发!真·从0到1!万字长文带你入门Qwen2.5-Coder——介绍、体验、本地部署及简单微调
2024年11月12日,阿里云通义大模型团队正式开源通义千问代码模型全系列,包括6款Qwen2.5-Coder模型,每个规模包含Base和Instruct两个版本。其中32B尺寸的旗舰代码模型在多项基准评测中取得开源最佳成绩,成为全球最强开源代码模型,多项关键能力超越GPT-4o。Qwen2.5-Coder具备强大、多样和实用等优点,通过持续训练,结合源代码、文本代码混合数据及合成数据,显著提升了代码生成、推理和修复等核心任务的性能。此外,该模型还支持多种编程语言,并在人类偏好对齐方面表现出色。本文为周周的奇妙编程原创,阿里云社区首发,未经同意不得转载。
|
7天前
|
人工智能 自然语言处理 前端开发
100个降噪蓝牙耳机免费领,用通义灵码从 0 开始打造一个完整APP
打开手机,录制下你完成的代码效果,发布到你的社交媒体,前 100 个@玺哥超Carry、@通义灵码的粉丝,可以免费获得一个降噪蓝牙耳机。
3720 13
|
26天前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息
|
11天前
|
人工智能 自然语言处理 前端开发
什么?!通义千问也可以在线开发应用了?!
阿里巴巴推出的通义千问,是一个超大规模语言模型,旨在高效处理信息和生成创意内容。它不仅能在创意文案、办公助理、学习助手等领域提供丰富交互体验,还支持定制化解决方案。近日,通义千问推出代码模式,基于Qwen2.5-Coder模型,用户即使不懂编程也能用自然语言生成应用,如个人简历、2048小游戏等。该模式通过预置模板和灵活的自定义选项,极大简化了应用开发过程,助力用户快速实现创意。
|
14天前
|
人工智能 自然语言处理 前端开发
用通义灵码,从 0 开始打造一个完整APP,无需编程经验就可以完成
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。本教程完全免费,而且为大家准备了 100 个降噪蓝牙耳机,送给前 100 个完成的粉丝。获奖的方式非常简单,只要你跟着教程完成第一课的内容就能获得。
6101 10
|
8天前
|
人工智能 C++ iOS开发
ollama + qwen2.5-coder + VS Code + Continue 实现本地AI 辅助写代码
本文介绍在Apple M4 MacOS环境下搭建Ollama和qwen2.5-coder模型的过程。首先通过官网或Brew安装Ollama,然后下载qwen2.5-coder模型,可通过终端命令`ollama run qwen2.5-coder`启动模型进行测试。最后,在VS Code中安装Continue插件,并配置qwen2.5-coder模型用于代码开发辅助。
610 4
|
10天前
|
云安全 人工智能 自然语言处理