自学C++ 记录1

自学C++ 记录1

  本人在大学期间已学过Java和一些C,现在工作上需要使用C++,以菜鸟教程为教材,记录一些笔记,方便日后复习和查找。

Hello World

#include <iostream> \\头文件,参考C
using namespace std;\\使用 std 命名空间。命名空间是 C++ 中一个相对新的概念。
// main() 是程序开始执行的地方
int main()
{
   cout << "Hello World"; // 输出 Hello World
   return 0;
}

三字符

  三字符序列不太常见,但 C++ 标准允许把某些字符指定为三字符序列。以前为了表示键盘上没有的字符,这是必不可少的一种方法。参见

3种注释方式( comment)

/* 这是注释 /

/
C++ 注释也可以
* 跨行
*/

//这是注释

数据类型

7种基本的内置类型:bool, char, int, double, float, void, wchar_t(宽字符型)。

char是8位字符类型,最多只能包含256种字符。wchar_t数据类型一般为16位或32位,wchar_t所能表示的字符数远超char型。

可用signed, unsigned, short, long修饰。

typedef 声明

使用 typedef 为一个已有的类型取一个新的名字。

typedef int feet;
feet distance; //相当于 int distance

feet 是 int 的另一个名称, 用feet代替了int,创建了一个整型变量 distance

枚举类型(enumeration)
enum color { red, green, blue } c;
c = blue;

变量 c 的类型为 color。最后,c 被赋值为 “blue”。
默认情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,以此类推。

enum color { red, green=5, blue };

此时,blue 的值为 6,因为默认情况下,每个名称都会比它前面一个名称大 1,但 red 的值依然为 0。

变量作用域

局部(local variable)和全局
当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动初始化

数据类型 初始化默认值
int 0
char ‘\0’
float 0
double 0
pointer NULL

常量

字符串常量

#define 预处理器 定义常量
#define LENGTH 10 
const 关键字定义常量
const int  LENGTH = 10;

修饰符类型

前面有提到4个修饰符:signed, unsigned, short, long
此外还有类型限定符:const,volatile,restrict。简单的介绍可以看这里,更详细的可以看这里

存储类

具体参考

存储类 介绍
auto 声明变量时根据初始化表达式自动推断该变量的类型、声明函数时函数返回值的占位符
register 用于定义存储在寄存器中
static 编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁
extern 提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。
mutable 仅适用于类的对象
thread_local 仅可在它在其上创建的线程上访问

运算符

和Java大部分相似

符号
算术运算符 +,-, *, /, %, ++, –
关系运算符 ==, !=, >, <, >=,<=,
逻辑运算符 &&, || , !
位运算符 &, |, ^(异位), ~(翻转), <<, >>
赋值运算符 算术运算符或位运算符后加上=

循环语句

while, for, do…while

判断语句

if, if…else, else if, switch, Exp1 ? Exp2 : Exp3;

函数

类似Java的method

Lambda 函数与表达式

Lambda 表达式把函数看作对象。Lambda 表达式可以像对象一样使用,比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值。

Lambda 表达式本质上与函数声明非常类似。

//[capture](parameters)->return_type {body}
[](int x, int y) -> int { int z = x + y; return z + x; }

随机数

关于随机数生成器,有两个相关的函数。一个是 rand(),该函数只返回一个伪随机数。生成随机数之前必须先调用 srand() 函数。
下面是一个关于生成随机数的简单实例。实例中使用了 time() 函数来获取系统时间的秒数,通过调用 rand() 函数来生成随机数:

#include <iostream>
#include <ctime>
#include <cstdlib>
 
using namespace std;
 
int main ()
{
   int i,j;
   // 设置种子
   srand( (unsigned)time( NULL ) );
   /* 生成 10 个随机数 */
   for( i = 0; i < 10; i++ )
   {
      // 生成实际的随机数
      j= rand();
      cout <<"随机数: " << j << endl;
   }
   return 0;
}

数组

和Java类似

//type arrayName [ arraySize ];
double balance[10];

此外还增加了C中指针的用法

double *p;
double balance[10];
p = balance;

balance 是一个指向 &balance[0] 的指针,即数组 balance 的第一个元素的地址。因此,上面的程序片段把 p 赋值为 balance 的第一个元素的地址。
*(balance + 4) 等同于*(p+4)是一种访问 balance[4] 数据的合法方式。

字符串

C 风格字符串

字符串实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。

char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
char greeting[] = "Hello"; //两句话效果相同

不需要把 null 字符放在字符串常量的末尾。C++ 编译器会在初始化数组时,自动把 ‘\0’ 放在字符串的末尾。

C++ 中的 String 类

C++ 标准库提供了 string 类类型,类似Java中的string,可以直接复制、连接string等操作,不需要使用strcpy、strcat等函数。

指针

每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。没学过C的人,需要详细了解下。这在Java中应该是没有的。详情

引用

引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。
主要是把它作为函数参数,以扩充函数传递数据的功能。

#include <iostream>
using namespace std;
 
// 函数声明
void swap(int& x, int& y);
 
int main ()
{
   // 局部变量声明
   int a = 100;
   int b = 200;
 
   cout << "交换前,a 的值:" << a << endl;//a=100
   cout << "交换前,b 的值:" << b << endl;//b=200
 
   /* 调用函数来交换值 */
   swap(a, b);
 
   cout << "交换后,a 的值:" << a << endl;//a=200
   cout << "交换后,b 的值:" << b << endl;//b=100
 
   return 0;
}
 
// 函数定义
void swap(int& x, int& y)//感觉就是把地址拿出来了
{
   int temp;
   temp = x; /* 保存地址 x 的值 */
   x = y;    /* 把 y 赋值给 x */
   y = temp; /* 把 x 赋值给 y  */
  
   return;
}

基本的输入输出

<iostream> 该文件定义了 cin、cout、cerr 和 clog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。

数据结构

其实就是C中的结构
数组允许定义可存储相同类型数据项的变量,但是结构是 C++ 中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。
容易困惑的就是加上指针了

#include <iostream>
#include <cstring>
 
using namespace std;
void printBook( struct Books *book );
 
struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};
 
int main( )
{
   Books Book1;        // 定义结构体类型 Books 的变量 Book1
   Books Book2;        // 定义结构体类型 Books 的变量 Book2
 
    // Book1 详述
   strcpy( Book1.title, "C++ 教程");
   strcpy( Book1.author, "Runoob"); 
   strcpy( Book1.subject, "编程语言");
   Book1.book_id = 12345;
 
   // Book2 详述
   strcpy( Book2.title, "CSS 教程");
   strcpy( Book2.author, "Runoob");
   strcpy( Book2.subject, "前端技术");
   Book2.book_id = 12346;
 
   // 通过传 Book1 的地址来输出 Book1 信息
   printBook( &Book1 );
 
   // 通过传 Book2 的地址来输出 Book2 信息
   printBook( &Book2 );
 
   return 0;
}
// 该函数以结构指针作为参数
void printBook( struct Books *book )
{
   cout << "书标题  : " << book->title <<endl;
   //为了使用指向该结构的指针访问结构的成员,必须使用 -> 运算符
   cout << "书作者 : " << book->author <<endl;
   cout << "书类目 : " << book->subject <<endl;
   cout << "书 ID : " << book->book_id <<endl;
}

猜你喜欢

转载自blog.csdn.net/weixin_44125936/article/details/85475154
今日推荐