本文概括了c++的一小部分基础知识
目录
第一个c++程序:
//包含头文件
#include<iostream>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
retrun 0;
}
c++程序的注释
-
单行注释 :用两根反斜杠打头,一般放在代码的上方,或者放在一行语句的末尾
-
多行注释 : 从 "/" 开始到 "*/" 结束
c++数据
在c++中数据有数字,字符,字符串三种类型
-
数字 : 直接书写,如 : 12 3 100
-
字符 : 用半角的单引号包含的一个字符,如 : 'A' , 'C' , 'a';
-
字符串 : 用半角的双引号包含的多个字符,如 : "acbDjhjdkf132"
注意:
-
在32位和64位操作系统中,同一种数据类型占用的内存空间可能不一样。
-
字符串(string)不是C++的基本数据类型,用sizeof求它占用内存的大小没有意义。
c++变量和常量
声明变量
变量在使用之前要声明,在声明的时候也可以对其赋初值,如:
int a = 10;
变量的作用域
作用域是指程序中变量存在(或生效)的区域
C++中定义变量的场景主要有五种:
1)在全部函数外面定义的是全局变量。
2)在头文件中定义的是全局变量。
3)在函数和语句块内部定义的是局部变量。
4)函数的参数是该函数的局部变量。
5)函数内部用static修饰的是静态局部变量。
c++中常用的数据类型
有以下5种:
-
整形(int)
-
浮点型(float)
-
字符(char)
-
字符串(string)
-
布尔(bool)
使用常量
常量 :程序中固定不变的数据
-
宏常量
一般在main函数的上面声明,用大写来命名
#define PI 3.1415926
-
const 修饰的常量
在程序的任何地方都可以声明。
const int N = 1e5;
c++函数的分文件编写:
1.头文件(*.h) : 需要包含的头文件,指定命名空间,声明去哪句变量,函数的声明,数据结构和类的声明等.
2.源文件(*.cpp) : 函数的定义,类的定义
3.主程序 : main函数,程序的核心流程,需要使用#include "头文件名"把头文件包含进去。
例:
girls.cpp
#include "girls.h"
void print(int no, string str) {
cout << "亲爱的" << no << "号: " << str << endl;
}
tools.cpp
#include "tools.h"
int max(int a, int b) // 比较两个数的大小,返回较大值
{
return a > b ? a : b;
}
int min(int a, int b) // 比较两个数的大小,返回较小值
{
return a < b ? a : b;
}
girls.h
#pragma once
#include<iostream>
using namespace std;
// 函数的分文件编写
void print(int no, string str);//表白神器
tools.h
#pragma once
#include<iostream>
using namespace std;
// 函数的分文件编写
int max(int a, int b);// 比较两个值的大小,返回较大的哪一个
int min(int a, int b);//比较两个值的大小,返回较小的哪一个
demo01.cpp (主程序):
#include "girls.h"
#include "tools.h"
int main()
{
cout << "max(5,8)=" << max(5, 8) << endl;
cout << "min(5,8)=" << min(5, 8) << endl;
print(3, "我是一只小小鸟!");
}
VS中调试程序
F9设置/取消断点。
F5/F10开始调试。
Shift+F5放弃调试。
F10逐过程执行。
F11逐语句执行(可进入函数内部)。局部变量窗口显示了变量的值,也可以修改。
递归函数:
递归函数就是在函数实现的过程中,自己调用了自己
例:
int f(int x) // 递归函数。
{
if (x == 0) return 0; // 递归终止的条件。
return x + f(x - 1); // 在函数体中调用了自己。
}
sizeof 关键字
#include<iostream>
using namespace std;
int main()
{
//用于数据类型 :sizeof(数据类型)
//用于变量 : sizeof(变量名) 或 sizeof 变量名
cout <<"sizeof(int)=" << sizeof(int) << endl;
int i;
cout << "sizeof(int)=" << sizeof i << endl;
}
c++数据类型
整形
c++用int(integer)来声明整形变量
在int关键字之前可以加以下4种修饰符:
-
signed : 有符号的,可以表示正数和负数
-
unsigned : 无符号的,只能表示正数
-
short : 短的,取值范围小,占用内存少
-
long : 长的,取值范围大,占用内存多
类型简写 | 类型全称 | 长度 | 取值范围 |
---|---|---|---|
short | signed short int | 2字节 | -32768~32767 |
unsigned short | unsigned short int | 2字节 | 0~65535 |
int | signed int | 4字节 | -2147483648~2147483647 |
unsigned | unsigned int | 4字节 | 0~4294967295 |
long | signed long int | 8字节 | -9223372036854775808~ 9223372036854775807 |
unsigned long | unsigned long int | 8字节 | 0~18446744073709551615 |
由数据类型推范围:
a)一个字节有8个位,表示的数据的取值范围是28-1,即255。
b)如果占用的内存是两个字节,无符号型取值范围是28ⅹ28-1。
c)如果占用的内存是四个字节,无符号型取值范围是28ⅹ28ⅹ28ⅹ28-1。
d)如果占用的内存是八个字节,无符号型取值范围是28ⅹ28ⅹ28ⅹ28ⅹ28ⅹ28ⅹ28ⅹ28-1。
e)如果是有符号,取值范围减半,因为符号占一个位。
f)计算机用最高位1位来表达符号(0-正数,1-负数),unsigned修饰过的正整数不需要符号位,在表达正整数的时候比signed修饰的正整数取值大一倍。
整数的书写
-
十进制 : int a = 100;
-
二进制 : 带前缀 0b 或 0B 开头
-
八进制 : 带前缀 0 开头
-
十六进制 : 带前缀 0x 或 0X 开头
#include<iostream>
using namespace std;
int main()
{
// 十进制
int a = 10;
cout << a << endl;
// 二进制
int x = 0b101;//表示十进制 5
cout << x << endl;
//八进制
int y = 015 ; //表示十进制 13
cout << y << endl;
// 十六进制
int z = 0x2A; //表示十进制42
cout << z << endl;
return 0;
}
c++11的long long 类型
在VS中,long是4字节,32位。 -2147483648~2147483647
在Linux中,long是8字节,64位。 -9223372036854775808~9223372036854775807
C++11标准增了long long类型的整数,至少64位,且至少与long一样长。
在VS中,long long是8字节,64位。 -9223372036854775808~9223372036854775807
在Linux中,long和long long类型都是8字节,64位。
浮点型(实数型)
-
float : 单精度
-
double : 双精度
-
long double : 扩展精度
数据类型 | 占用空间 | 有效数字范围 |
---|---|---|
float | 4字节 | 7位有效数字 8位 |
double | 8字节 | 15~16位有效数字 17位 |
long double | 不少于double | 不低于double 17位 |
字符型
字符型(char)占用的内存空间为一个字节,书写为单引号包含。
字符的本质是整数,0~127
// 两个等价 char a = 'X' char a = 88
c++11原始字面量
原始字面量(值)可以直接表示字符串的实际含义,不需要转义和连接
语法 :
R"(字符串的内容)" // 或 R"xxx(字符串的内容)xxx"
例:
#include <iostream> // 包含头文件。 using namespace std; // 指定缺省的命名空间。 int main() { // 使用转义的方法 string path = "C:\\Program Files\\Microsoft OneDrive\\tail\\nation"; cout << "path is " << path << endl; // 使用C++11原始字面量 string path1 = R"abcd(C:\Program Files\Microsoft OneDrive\tail\nation)abcd"; cout << "path1 is " << path1 << endl; string str = R"( <no>0001</no> <name>西施</name> <sc>火树银花</sc> <yz>沉鱼</yz> <age>23</age> <weight>48.5</weight> <height>170</height>)"; cout << str << endl; }
字符串型:
-
c风格 : char a[];
-
c++风格 : string a;
布尔型
-
占用一个字节
-
只有true 和 false两种情况
-
c中没有,c++中才有
数据类型的转换
分为两种:
-
自动类型转换 : 某些类型的转换编辑器可以隐式地进行;
整形由低到高:
char -> short -> int -> long -> long long
浮点型由低到高
float -> double -> long double
-
强制类型转换 : 有些类型的转换需要程序员显式指定
数据类型取别名
#include <iostream> // 包含头文件。
using namespace std; // 指定缺省的命名空间。
int main()
{
//1.为名称复杂的类型创建别名,方便书写和记忆
// typedef long long LL;
//2.创建与平台无关的数据类型,提高程序的兼容性
//在vs中,short是两个字节,int是4个字节,long也是4个字节long long 是8个字节
typedef short int16_t;
typedef int int32_t;
typedef long long int64_t;
// 在linux中,short是两个字节,int是4个字节,long是8个字节,long long也 是8个字节
typedef short int16_t;
typedef int int32_t;
typedef long int64_t;
// 在程序源代码中,只使用别名int16_t、int32_t、int64_t,不使用原名。
}