文章目录
- 一、程序结构
- 二、定义变量和声明变量
- 三、变量作用域
- 四、定义常量
- 五、类型限定符号
- 六、存储类
- 七、运算符
- 八、函数
- 九、指针与引用
- 十、C++ 的基本输入输出
- 十一、“结构成员”和“类变量”引用
一、程序结构
#include <iostream> // C++ 语言定义了一些头文件,这些头文件包含了程序中必需的或有用的信息。
using namespace std; // 告诉编译器使用 std 命名空间。命名空间是 C++ 中一个相对新的概念。
int main() //main() 是程序开始执行的地方
{
// 如果没有声明namespace,那就要使用 std::cout << "Hello" << "World";
cout << "Hello" << "World"; // 会在屏幕上显示消息 "Hello World"
return 0; // 终止 main( )函数,并向调用进程返回值 0
}
二、定义变量和声明变量
下面代码中,语句 extern int var;表示 var 在别的文件中已经定义,提示编译器遇到此变量时在其它模块中寻找其定义。语句 extern int ble = 10;表示定义了变量 ble,这一点需要注意。
注意:即使是 extern ,如果给变量赋值了,就是定义了。
extern int var; // 声明
extern int ble =10; // 定义
typedef int INT; // 声明
struct Node; // 声明
int value ; //声明 + 定义,因为C++会为value变量赋默认值
三、变量作用域
局部作用域:在函数内部声明的变量具有局部作用域,它们只能在函数内部访问。
全局作用域:在所有函数和代码块之外声明的变量具有全局作用域,它们可以被程序中的任何函数访问。
块作用域:在代码块内部声明的变量具有块作用域,它们只能在代码块内部访问。
类作用域:在类内部声明的变量具有类作用域,它们可以被类的所有成员函数访问。
注意:如果在内部作用域中声明的变量与外部作用域中的变量同名,则内部作用域中的变量将覆盖外部作用域中的变量。
#include <iostream>
using namespace std;
int a = 20; //全局作用域变量
class MyClass {
public:
static int class_var; // 类作用域变量
};
int main() {
int g = 10; // 局部作用域变量
{
int a = 20; // 块作用域变量
}
return 0;
}
四、定义常量
#define LENGTH 10 // define方式定义
const int LENGTH = 10; // const方式定义
五、类型限定符号
类型限定符提供了变量的额外信息,用于在定义变量或函数时改变他们默认行为的关键字
// const 实例
const int NUM = 10; // 定义常量 NUM,其值不可修改
const int* ptr = &NUM; // 定义指向常量的指针,指针所指的值不可修改
int const* ptr2 = &NUM; // 和上面一行等价
volatile 实例
volatile int num = 20; // 定义变量 num,其值可能会在未知的时间被改变
// mutable 实例
class Example {
public:
int get_value() const {
return value_; // const 关键字表示该成员函数不会修改对象中的数据成员
}
void set_value(int value) const {
value_ = value; // mutable 关键字允许在 const 成员函数中修改成员变量
}
private:
mutable int value_;
};
// static 实例
void example_function() {
static int count = 0; // static 关键字使变量 count 存储在程序生命周期内都存在
count++;
}
// register 实例
void example_function(register int num) {
// register 关键字建议编译器将变量 num 存储在寄存器中
// 以提高程序执行速度
// 但是实际上是否会存储在寄存器中由编译器决定
}
六、存储类
存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期。
auto 存储类
auto 关键字用于两种情况:声明变量时根据初始化表达式自动推断该变量的类型、声明函数时函数返回值的占位符。
auto f=3.14; //double
auto s("hello"); //const char*
auto z = new auto(9); // int*
auto x1 = 5, x2 = 5.0, x3='r';//错误,必须是初始化为同一类型
register 存储类
定义存储在寄存器中而不是 RAM(内存) 中的局部变量。
register int miles;
static 存储类
static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。
extern 存储类
extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当您使用 ‘extern’ 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。
mutable 存储类
mutable 说明符仅适用于类的对象,这将在本教程的最后进行讲解。它允许对象的成员替代常量。也就是说,mutable 成员可以通过 const 成员函数修改。
thread_local 存储类
使用 thread_local 说明符声明的变量仅可在它在其上创建的线程上访问。 变量在创建线程时创建,并在销毁线程时销毁。 每个线程都有其自己的变量副本。
七、运算符
算法运算符
关系运算符
逻辑运算符
位运算符
赋值运算符
八、函数
函数声明、函数定义、函数调用
#include <iostream>
using namespace std;
// 函数声明
int max(int num1, int num2);
int main ()
{
// 局部变量声明
int a = 100;
int b = 200;
int ret;
// 调用函数来获取最大值
ret = max(a, b);
cout << "Max value is : " << ret << endl;
return 0;
}
// 函数返回两个数中较大的那个数
int max(int num1, int num2)
{
// 局部变量声明
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
函数参数
当调用函数时,有三种向函数传递参数的方式
九、指针与引用
// 指针
int var = 20; // 实际变量的声明
int *ip; // 指针变量的声明
ip = &var; // 在指针变量中存储 var 的地址
// 引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。
int i = 17;
int& r = i; // 为变量i声明引用r
十、C++ 的基本输入输出
#include <iostream>
using namespace std;
int main( )
{
char name[50];
cout << "请输入您的名称: ";
cin >> name;
cout << "您的名称是: " << name << endl;
}
十一、“结构成员”和“类变量”引用
// 为了访问结构的成员,我们使用成员访问运算符(.)
struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
};
Books book;
cout << book.book.title;
// 为了访问类的成员,我们使用变量访问运算符(::)
class MyClass {
public:
static int class_var;
};
int MyClass::class_var = 30;