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. 移动端适配方案(rem+flex)

    为什么用rem不用px? 主流:各大网站的移动版绝大多数都是用的rem.   移动端屏幕分辨率差别太大:最低适配的iPhone6,分辨率仅为750*1334.而现在市面上大多数手机,都达到了1080* ...

  2. 浅谈Java中switch分支语句

    前言: 在程序中遇到多分支选择的时候,想必大家都喜欢用if...else if...else...语句,尤其是初学者,因为在了解switch语句之前,我也是只会用if...else语句.那么现在看完这 ...

  3. (转载)林轩田机器学习基石课程学习笔记1 — The Learning Problem

    (转载)林轩田机器学习基石课程学习笔记1 - The Learning Problem When Can Machine Learn? Why Can Machine Learn? How Can M ...

  4. SparkSql 整合 Hive

    SparkSql整合Hive 需要Hive的元数据,hive的元数据存储在Mysql里,sparkSql替换了yarn,不需要启动yarn,需要启动hdfs 首先你得有hive,然后你得有spark, ...

  5. PHP代码篇(五)--如何将图片文件上传到另外一台服务上

    说,我有一个需求,就是一个临时功能.由于工作开发问题,我们有一个B项目,需要有一个商品添加的功能,涉及到添加商品内容,比如商品名字,商品描述,商品库存,商品图片等.后台商品添加的接口已经写完了,但是问 ...

  6. JS之for循环面试题

    今天同事问了道问题 ,b=; ,b<;++a,++b){ g=a+b } console.log(g) 问输出结果为多少??? 答案:12 这里要知道for循环的条件不管写多少个,必须都满足才可 ...

  7. calcifications loss

    import keras import tensorflow as tf from keras.models import Model from keras import backend as K # ...

  8. leetcode279. 完全平方数

    给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示例 1: 输入: n = 12输出: 3 解释: 12 = ...

  9. 团队Git现场编程实战

    团队Git现场编程实战 一.组员职责分工 组员 分工 贡献度 卢欢(组长) 前后端接口设计 8% 严喜 寻找相关资料 8% 张火标 设计并描述界面原型 8% 钟璐英 编写随笔 8% 周华 填写完善文档 ...

  10. MySQL实战45讲学习笔记:第四十一讲

    一.本节概述 我在上一篇文章最后,给你留下的问题是怎么在两张表中拷贝数据.如果可以控制对源表的扫描行数和加锁范围很小的话,我们简单地使用 insert … select 语句即可实现. 当然,为了避免 ...