c++是一种中级语言,是c的扩充,是一种面向对象的程序设计语言,可以运行到多个平台。这里直接讲语法。

  基础c++模板:

#include <iostream>
using namespace std;
int main()
{
cout << "Hello, world!" << endl;
return 0;
}

一:初级知识

1.输入输出

  标准输入输出流cout和cin,分别代表输入流对象和输出流对象,在头文件iostream中定义。键盘和显示器是计算机的标准输入输出设备,标准流是直接不需要打开文件就可以操作的流式文件。

  输出:cout和输出运算符<<配合使用,<<作为输出信息的"插入运算符",可以输出多个输出项,把内容依次插入到输出流cout中,不需要类型判断。

  输入:cin和输入运算符>>配合使用,>>作为输入信息"提取运算符",可以输入多个输出项,从输入设备键盘提取数据到cin中

  endl(end of line)代表回车换行操作。

   c++允许对变量的声明放在程序的任何位置(但必须在使用该变量之前)。

2.用const定义常变量

  c语言的#define只是预编译时进行的字符置换,不占用内存单元。而c++中用const定义常变量,具有变量的属性,有数据类型,占用存储单元,可以用地址指向它,在程序运行过程中的值是固定的。

3.函数定义和声明

  在c++中。如果函数调用的位置在函数定义之前,则要求在函数调用之前必须对所调用的函数作函数原型声明。一般形式是:

# 函数类型 函数名(参数表);例如:
int max(int x,int y,int z);
int max(int,int,int);

在编译时只检查参数类型,不检查参数名。

4.函数的重载

  c++允许在同一作用域中用同一函数名定义多个函数,这些函数的参数个数和参数类型不相同,用来实现不同的功能。,这就是函数的重载,即一个函数名多用。

  下面是一个例子:

# 第一个函数
int a(int a,int b){}
# 第二个函数
float a(float a,float b){}
# 第三个函数
long a(long a,long b){}

  这里要注意的是,参数的个数和类型至少有一个不同,返回值可以相同也可以不同,但不允许参数个数和类型相同而只有返回值不同。

5.函数模板

  这个函数模板就是建立一个通用函数,这个函数的函数类型和形参类型不具体指定,用一个虚拟的类型代表,在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,实现了不同函数的功能。定义模板的一般形式为:

# template <typename T1,typename T2,typename T3> 或者:
# template <class T1,class T2,class T3>

  下面是一个例子:

template <typename T>
T show(T a,T b){}

   使用函数模板比函数重载更方便,更简单,但是只适合函数的参数个数相同而类型不同,且函数体相同的情况。

6.有默认参数的函数

  c++在函数调用时给形参一个默认值,就减少了重复。实参个数和形参个数不需要相同。但是默认参数要放在形参列表中的最右端,否则可能就会被覆盖,或者参数不够而报错。

  要注意的是必须在函数调用之前在函数定义(定义在调用前)或者函数声明(定义在调用后)进行给出默认值。而且定义和声明都给默认值的情况下,取声明的值,因此最好只在函数声明时指定默认值

   一个函数不能既作为重载函数,又作为有默认参数的函数,会出现二义性。

7.变量的引用

  在c++中,变量的引用就是变量的别名。如下:

int a;
int &b = a; #声明b是一个整型变量的引用,初始值为a

  这里的&是"引用声明符",并不代表地址,在声明一个引用时,必须同时进行初始化,代表哪一个变量。

  在建立引用时只有声明,没有定义。



  引用的注意事项:

  (1)引用必须与某一种类型的数据相联系。

  (2)引用与其所代表的变量共享同一内存空间。

  (3)区分&a是声明引用变量还是取地址,就看前面有没有类型符。

  (4)可以给一个变量声明多个引用。

  (5)引用在初始化后不能再被重新声明为另一个变量的别名。

8.变量的引用作为函数参数

  c++之所以增加"引用",是为了利用它作为函数参数,是为了让函数的数据传递更方便。函数的参数传递只要有以下两种情况。

  将变量的引用作为形参

  c++把变量的引用作为函数形参,就可以指向同一地址单元。对引用型形参的初始化是在函数调用时通过虚实结合实现的。

  引用和使用指针变量做函数形参的区别

  使用引用不必使用指针变量,就不需要另外开辟内存空间,调用时实参不必加&,系统直接传的是实参的地址,也不必使用指针运算符*。

   引用细节

  (1)不能建立void的引用。

  (2)不能建立引用的数组。

  (3)可以将变量的引用的地址赋给一个指针,此时指针指向的是原来的变量。但是不能直接建立指向引用类型的指针变量。

int a = 2;
int &b = a;
int *p = a; #p相当于a变量的地址

  (4)可以建立指针变量的引用

int i = 3;
int *b = &a;
int* &pt= b #pt相当于b

  (5)可以用const对引用加以限定,不允许改变引用的值

int i = 3;
const int &a = i; #声明常引用,不允许改变i的值

  (6)可以用常量或表达式对引用进行初始化,但此时必须用const做声明

int i = 3;
const &a = i + 2;

上面的const &a = i + 2;语句相当于:

int temp = i + 2;     #临时变量在内部实现,用户不能访问
const int &a = temp;

也可以用不同类型的变量进行初始化:

double d = 3.252;
const int &a = d;

相当于:

int temp = d;
const int &a = temp;

此时a的值为3.

上面是c++的基础,之后的文章会向大家介绍c++的一些高级的语法。

c++语法大全笔记(一)的更多相关文章

  1. Golang 语法学习笔记

    Golang 语法学习笔记 包.变量和函数. 包 每个 Go 程序都是由包组成的. 程序运行的入口是包 main. 包名与导入路径的最后一个目录一致."math/rand" 包由 ...

  2. Emmet语法大全手册

    这是基于官方手册整理制作的,因为那个手册网页打开很慢,所以就整理在这里了.以备不时之需. Syntax   Child: > nav>ul>li <nav> <ul ...

  3. Inno Setup脚本语法大全

    Inno Setup脚本语法大全 ResourceShare Bruce 11个月前 (10-28) 6136浏览 0评论   Inno Setup 是什么?Inno Setup 是一个免费的 Win ...

  4. Razor语法大全(转)

    Razor语法大全 因为最近在看mvc的时候在学习Razor的发现了这个不错的博文,故转之. 本文页面来源地址:http://www.cnblogs.com/dengxinglin/p/3352078 ...

  5. mvc 4 Razor (@html.xx)语法大全以及应用

    Razor语法大全  @Html ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction差别 对这 ...

  6. MYSQL 语法大全自己总结的

    mysql语法大全 --------数据链接---------------------数据库服务启动net start mysql --关闭服务net stop mysql --登录 -u,-p后面不 ...

  7. Swift入门教程:基本语法大全

    原文:Swift入门教程:基本语法大全       简介:                                                                        ...

  8. freemarker(FTL)常见语法大全

    [转载]freemarker(FTL)常见语法大全 FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format}  ${boo ...

  9. MarkDown语法 学习笔记 效果源码对照

    MarkDown基本语法学习笔记 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 下面将对Markdown的基本使用做一个介绍 目 ...

随机推荐

  1. 1-函数返回值-return详解及应用-1

    return 返回值   可以是:数字.字符串.布尔.函数.对象(元素\[]\{}\null).未定义  <script> function fn1(){return 100;} aler ...

  2. JS实现深浅拷贝

    1.实现浅拷贝 // 1. ...实现 let copy1 = {...{x:1}} // 2. Object.assign实现 let copy2 = Object.assign({}, {x:1} ...

  3. Java --Lamda表达式

    Lamda:属于函数式编程的概念: interface IMessage { public void print() ; } public class TestDemo { public static ...

  4. 使用JS通过Web API执行批量操作,多个操作是一个事务!

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复235或者20161105可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  5. 干货:Wireshark使用技巧-显示规则

    - 显示规则使用 在Wireshark界面对已经抓取的报文在界面的显示进行控制的规则,称为显示规则,显示规则只是让一部分不符合规则的报文不被显示,但未被丢弃,这些报文仍然存在在Wireshark的系统 ...

  6. 安装Ubuntu系统后的配置工作

    目录 卸载webapps和LibreOffice 修改软件更新和安装的apt源 修改安装python库的pip源 安装并设置搜狗输入法 安装vim.git.pip和tweak软件 修改用户主目录下的文 ...

  7. Nginx 配置高可用的集群

    1.什么是 nginx 高可用 (1)需要两台 nginx 服务器 (2)需要 keepalived (3)需要虚拟 ip 2.配置高可用的准备工作 (1)需要两台服务器 192.168.17.129 ...

  8. 6.GC垃圾回收算法和垃圾收集器的关系

    JAVAGC垃圾回收机制和常见垃圾回收算法 推荐博客:JVM垃圾回收机制和常见垃圾回收算法 JVM的内存结构.垃圾回收算法

  9. Html学习之十八(表格与表单学习--统计表制作)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. 4. gitlab 安装、项目创建

    官网: https://about.gitlab.com/ https://docs.gitlab.com/omnibus/maintenance/README.html#get-service-st ...