1. 编写第一个helloworld程序
1. 新建一个工程,编写如下代码
#include "pch.h" #include <iostream> // 标准输入输出流 using namespace std; // 使用命名空间std int main() { cout << "helloworld" << endl; // 标准的输出 system("pause"); // 阻塞功能 return EXIT_SUCCESS; // 返回正常的推出 }
count是C++标准的输出流,endl是输出换行并且刷新缓冲区
<<:可以拼接基本的数据类型,string ,int char等
2. 双冒号作用域运算符
局部变量与全局变量:就近原则
int atk = 200; void test() { int atk = 100; cout << "当前的atk为" << atk; // :: 代表全局的作用域,本身是全局运算符 cout << "全局的atk为" << ::atk; } int main() { test(); }
3. 命名空间的使用
(1). 命名空间:可以放函数,变量,结构体,类
(2). 命名空间必须定义在全局作用域下面
(3). 命名空间可以嵌套命名空间
(4). 命名空间是开放的,可以随时向以前的命名空间中添加内容
(5). 匿名命名空间,当写了无名命名空间,相当于内容前添加了static
(6). 命名空间可以取别名
namespace ns { int a = 0; void function(); struct MyStruct { }; class Animal {}; namespace nc { int a = 20; } } // 此命名空间会与上面的命名空间合并,不能定义重复的内容 namespace ns { int b = 0; } namespace { int mc = 0; int md = 0; } namespace longname { int me = 20; } void namespacetest() { // 命名空间的主要用途是解决命名冲突的问题 first::atk(); second::atk(); cout << ns::nc::a << endl; cout << ns::a << endl; mc = 20; cout << mc << endl; namespace shortname = longname; cout << shortname::me << endl; } int main() { namespacetest(); }
4. using 声明和using 编译指令
此时如果继续引入一个命名空间it
2. 面向对象编程:万物皆对象
三大特性:
1. 封装
2. 继承
3. 多态:一个接口,多种方法
3. C++对C语言的增强
1. 全局变量检测增强
上面代码作为局部变量都不能通过
2. 函数检测增强:参数类型检测增强,返回值检测增强,函数调用参数检测增强
3. 类型转换检测增强
4. struct结构体增强
C++调用这个结构体:advance ad;可以不加struct 关键字
C调用这个结构体:struct advance ad:必须要有struct 关键字
5. bool类型增强
6. 三目运算符增强
7. const增强
a. c语言的伪常量和c++真正的常量
b. c语言中的const 默认外部链接,c++默认内部链接
c. const分配内存情况
(1). a中取地址会分配临时内存
(2). b中extern 引用外部const变量时
(3). 使用普通变量初始化const变量,
d. 自定义数据类型
e. 尽量使用const 代替 #define
a. const有类型,可以通过编译器类型安全检查,define无类型,不可以进行类型检查
b. const有作用域,#define不重视作用域,默认定义到文件的结尾
8. 引用(reference):起别名
引用是c++对c的一个重要补充,在c/C++ 的指针的作用基本是一样的,但是c++增加了另外一种给函数传递地址的途径,这就是按照引用传递(pass-by-reference),它也存在于其它的一些编程语言中,不是c++ 的发明。
注意事项:
a. 引用必须是一块合法的内存空间
b. 不要返回局部变量的引用
但是局部变量是静态变量时候,可以返回引用,同时这个函数调用可以作为左值使用
引用的本质在C++内部的实现是一个指针常量
9. 参数的传递方式
a. 值传递:不想改变以前的值
b. 地址传递
10. 指针的引用
12. 常量的引用