C++学习笔记-2.C++的初步知识

一、最简单的C++程序

1.标准C++要求main函数必须声明为int型,如果程序正常执行,则向操作系统返回数值0,否则返回数值-1

2.在C语言中所有的头文件都带后缀.h,而按C++标准要求,由系统提供的头文件不带后缀.h,由用户自己编制的头文件可以有后缀.h,在C++程序中也可以使用C语言编译系统提供的带后缀.h的头文件

3.C++标准库中的类和函数是在命名空间std中声明的,因此程序中如果需要使用C++标准库中的有关内容,就需要使用using namespace std;作声明

二、C++对C的扩充

1.C++的输入输出

流名 含义 隐含设备
cin 标准输入 键盘
cout 标准输出 屏幕
cerr 标准出错输出 屏幕
clog cerr的缓冲形式 屏幕

注:C语言要求变量的声明部分必须在执行语句之前,而C++允许对变量的声明放在程序的任何位置(但必须在使用该变量之前)

2.在C语言中常用#define指令来定义符号常量

C++提供了用const定义常变量的方法,例:const float PI = 3.14

区别:用const定义的常变量具有变量的属性,有数据类型,占用存储单元,有地址

3.函数原型声明:在C++中,如果函数调用的位置在函数定义之前,则要求在函数调用之前必须对所调用的函数作函数原型声明

4.函数的重载:C++允许在同一作用域中用同一函数名定义多个函数,这些函数的参数个数和参数类型不相同,这些同名的函数用来实现不同的功能

注意:不允许参数个数和类型都相同而只有返回值类型不同

5.函数模板:适用于函数的参数个数相1同而类型不同,且函数体相同的情况

格式:template <typename T> 或 template <class T>

例:

template <typename T>
T max(T a, T b, T c)
{
    if(b > a)
        a = b;
    if(c > a)
        a = c;
    return a;
}

6.有默认参数的函数

例:float volume(float h, float r = 12.5);

函数调用:volume(45.6); 或 volume(34.2, 10.4);

注:(1)实参与形参的结合是从左至右顺序进行的,因此指定默认值的参数必须放在形参表列中的最右端

(2)若需要指定默认值,则应在调用函数之前指定,且为避免混淆,最好只在函数声明时指定默认值

(3)一个函数不能既作为重载函数,又作为有默认参数的函数

7.变量的引用

格式:typename &refName = varName;

说明:(1)对变量声明一个引用,并不另开辟内存单元;在声明一个引用时,必须同时使之初始化,即声明它代表哪一个变量

(2)在声明一个变量的引用后,在本函数执行期间,该引用一直与其代表的变量相联系,不能再作为其他变量的别名,即 int &b = a1; int &b = a2; 是错误的

(3)引用与其所代表的变量共享同一内存单元,系统并不为引用另外分配存储空间,实际上,编译系统使引用和其代表的变量具有相同的地址,即有 sizeof(a) = sizeof(b)

(4)对引用的初始化,可以用一个变量名,也可以用另一个引用

用途:(1)将引用作为函数参数:将变量名作为实参时传给形参的是变量的值,在执行函数期间形参值发生变化并不传回给实参

例:

#include <iostream>
using namespace std;
void swap(int &a, int &b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
}
int main()
{
    int i = 3, j = 5;
    swap(i, j);
    cout << "i = " << i << " j = " << j << endl;
    return 0;
}

注意:(1)不能建立void类型的引用

(2)不能建立引用的数组,因为数组名只代表数组首元素的地址,本身不占有存储空间

(3)可以将变量的引用的地址赋给一个指针,此时指针指向原来的变量

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

例:int i = 5; int *p = &i; int* &pt = p; cout << *pt; 此时输出5

(5)可以用const对引用加以限定,不允许改变该引用的值,但是它并不阻止改变引用所代表的变量的值

这一特征常用于作函数的形参,来保护形参的值不被改变

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

此时编译器处理方式:生成一个临时变量,用来存放该表达式的值,引用是该变量别名

8.内置函数:在编译时将所调用的函数的代码嵌入到主调函数中,又称内联函数

一般对规模很小且使用频繁的函数使用,以大大提高运行速度

例:

inline int max(int a, int b, int c)
{
    if(b > a)
        a = b;
    if(c > a)
        a = c;
    return a;
}

9.作用域运算符:C++提供作用域运算符 :: ,它能指定所需要的作用域

例:

#include "iostream"
using namespace std;
float a = 1;
int main(int argc, char const *argv[])
{
    int a = 2;
    cout << a << "\t" << ::a << endl;
    return 0;
}

此时输出: 2    1

10.字符串变量

C++标准库中声明了一个字符串类,在使用string类功能时,必须在本文件的开头将C++标准库中的string头文件包含进来,即 #include <string>

(1)对字符串变量的赋值:

例:string str, tmp = “China”;

str = “Canada”; 或 str = tmp;

在定义字符串变量不需指定长度,它的长度随其中的字符串长度而改变,且不存储末尾的\0

(2)字符串变量的输入输出:cout << string1;    cin >> string2;

(3)字符串变量的运算:复制直接用等号,字符串连接用加号,字符串比较直接用关系运算符

例:str = string1 + string2;

(4)字符串数组:并不要求每个字符串元素具有相同的长度

11.动态分配/撤销内存的运算符 new 和 delete

注意:如果由于内存不足等原因而无法正常分配空间,new会返回一个空指针NULL

new 和 delete 是运算符,不是函数,new要和delete配合使用

时间: 2024-10-12 04:34:10

C++学习笔记-2.C++的初步知识的相关文章

最大熵学习笔记(一)预备知识

  生活中我们经常听到人们说"不要把鸡蛋放到一个篮子里",这样可以降低风险.深究一下,这是为什么呢?其实,这里边包含了所谓的最大熵原理(The Maximum Entropy Principle).本文为一则读书笔记,将对最大熵原理以及由此导出的最大熵模型进行介绍,重点给出其中所涉及数学公式的理解和详细推导. 相关链接 最大熵学习笔记(零)目录和引言 最大熵学习笔记(一)预备知识 最大熵学习笔记(二)最大熵原理 最大熵学习笔记(三)最大熵模型 最大熵学习笔记(四)模型求解 最大熵学习笔

加壳学习笔记(一)-基础知识

1.预备知识 1.关于栈,在windows里面的堆栈其实很简单,当学了才知道哈,呵呵,第一要记住的是windows里面的栈是向低地址生长的(extended,延伸,呵呵,顺便丰富下英语的单词量,确实是少的可怜),你可以这样认为,栈就像是一个倒立的箱子,箱子的口子是向下的,底是向上的,这里就表明了系统栈的分布也是延伸方向是由高地址向低地址extended,在最初的空栈阶段,栈顶(extended stack pointer,简称是esp)在栈底的低一个位置,呵呵,其实很好理解,就是说最初的箱子是空

汇编入门学习笔记 (一)—— 基础知识、寄存器

疯狂的暑假学习之  汇编入门学习笔记 (一) 参考:<汇编语言> 王爽  第一,二章 一.基础知识 1. 用汇编语言编写程序的工作过程 汇编本质就是为了方便程序员,把二进制代码用汇编指令来表示 汇编指令---------------->  编译器  ---------------->机器码----------------> 计算机执行 mov ax, bx                                                          100

《solidity学习笔记》chapter 2-solidity基础知识

映射 映射本质上是存储和查找数据所用的键-值对. mapping (uint => string) intToStr; 地址 以太坊区块链由 account (账户)组成,你可以把它想象成银行账户.一个帐户的余额是 以太 (在以太坊区块链上使用的币种),你可以和其他帐户之间支付和接受以太币,就像你的银行帐户可以电汇资金到其他银行帐户一样.每个帐户都有一个"地址",你可以把它想象成银行账号.这是账户唯一的标识符. mapping (address => uint )publi

《solidity学习笔记》chapter 3-solidity其他知识

Ownable contracts OpenZeppelin Solidity库里的合约之一,可以通过继承使用. /**  * @title Ownable  * @dev The Ownable contract has an owner address, and provides basic authorization control  * functions, this simplifies the implementation of "user permissions".  *

Android学习笔记-Android应用程序初步认识

一直觉得自己的技术没有一门专长,似乎什么都会一点,但是却一点都不深入.决定学习Android的开发,说不出的理由,希望自己能够坚持下去. 其实之前已经搭建好了Android的开发环境eclipse+ADT+SDK,这里就不做具体介绍了,个人觉得还是非常有必要把这3个软件单独安装一下, 这样对开发工具能有个系统的认识.Eclipse是一个IDE,针对多门开发语言都能够使用,SDK是针对Android应用开发提供的一个框架,其中有开发 过程中使用到的包和一些集成的工具,ADT是安装在eclipse上

Spring学习笔记--环境搭建和初步理解IOC

Spring框架是一个轻量级的框架,不依赖容器就能够运行,像重量级的框架EJB框架就必须运行在JBoss等支持EJB的容器中,核心思想是IOC,AOP,Spring能够协同Struts,hibernate等其他众多的框架. 下面介绍环境的搭建,首先下载好spring的完整包,我下载的是4.2.5版本的,在elipse中,新建java项目: 1,导入核心jar包: 2.在src目录下,创建spring配置文件(名称可以自定义,一般写为beans.xml): <?xml version="1.

《C++ Primer Plus》学习笔记 第1章 预备知识

第一章 预备知识C++在C语言的基础上添加了对"面向对象编程"的支持和对"泛型编程"的支持.类 —— 面向对象模板 —— 泛型编程1.1 C++简介1.2 C++简史1.3 可移植性和标准1.4 程序创建的技巧http://www.cnblogs.com/moonlightpoet/p/5611668.html1.5 总结

C#学习笔记----栈与堆的知识

http://my.oschina.net/lichaoqiang/blog/291906 当我们对.NET Framework的一些基本面了解之后,实际上,还是很有必要了解一些更底层的知识.比如.NET Framework是如何进行内存管理的,是如何垃圾回收的......这样,我们才能写出更高性能的程序. 在.NET Framework中,有2个地方帮我们保存管理数据:一个是"堆",也叫"托管堆",由.NET Framework的垃圾收集器(Garbage Col