重拾C++
欢迎C++入门
你好! 这是我第N+1次 学习C++ 。如果你想学习如何使用C++, 可以仔细阅读这篇文章,了解一下C++的基本语法知识。
如果是大牛欢迎指正交流!!!
我希望能用最简单且最全面的记录学习C++,如果你这样想不妨借给我3 5 分钟,我们一起出发。
第一个C++程序
C++程序编写:
-
创建项目
ed2k:迅雷下载 ISO:使用压缩工具打开 点击exe 安装安装教程
b. VS 创建新建项目( Visual C++)经典起名hello world
c. 项目(helloworld)中源文件 添加C++文件
d. 写个hello Word吧!/* 可能这里有许多问题,但是不能着急,随着我们深入学习便可以洞察天机 */ #include <iostream> using namespace std; int main() { cout<<"hello word"<<endl; system("pause"); returen 0; } -
创建文件
-
编写代码
-
运行程序
-
调试
注释
- 单行多行注释:
//单行注释 /* 多 行 注 释 */
变量 常量 关键字 命名规则
- 变量:
给定指定内存空间 给名 方便管理内存//数量类型(int char ……) 变量名称(命名规则) 数据值(数值范围) //例子 int a = 10; - 常量: 公认的不变的数据
举例//宏常量 文件上方 不可修改常量 #define clearLove 7 //变量常量 函数中 不可修改常量 const int Uzi = 666; - 关键字(标识符)
系统已经使用(比如定义的变量、)
4.** 命名规则(变量 常量 函数)**
字母、数字、下划线(数字不能第一个)
数据类型 sizeof关键字 转义字符 字符串 bool类型
-
数据类型整形: 变量的数据类型(int类型举例),浮点型(float 2.4f double 2.4不写默认双精度 科学计数法3e3 = 3*10^3),字符型(char)
说明:short 2 int 4 -2^4 +2^4 long win4 linu32 4 linu64 8 long long 8 -
sizeof : 统计数据类型所占内存大小sizeof(int)
-
转义字符: \a 报警 ASCII 007 ‘+*’ ; \n:换行 \\反斜杠 \t 制表符
-
字符+字符串: 字符:char str = ‘h’;
字符串例子://C风格 char [] str = "C"; //C++风格 #include <string> string str = "C++" -
bool类型 bool值: true本质1 false本质0
数据输入 运算符 流程结构
- 输入 输入格式important
例子using namespacd std; int a = 0; cout <<"修改a"<<endl; cin>>a; cout <<a<<endl; - 运算符
算术运算法:+、-*、*、/、%、++、–;%:取余 做个水仙花数实践
赋值运算符:+、=、 -=、 /= 、*=
逻辑运算符:!、|、 &、||、&&
比较运算符:<、>、<=、>= - 流程结构
a). 顺序:
b). 选择:if else 、switch casedefault 默认执行break跳出选择、三目运算?:(可以返回值)
c). 循环:for 、while 、do whilebreak跳出循环、continue(结束语句下面循环,重新循环)
d). 以上三种嵌套符合结构 +goto
9*9乘法表 不妨用for实现一个
举例子:#include <iostream> using namespace std; int main() { //cout << "hehe" << endl; int i,j; i = 1; while (i<10) { j = 1; while (j < i+1) { cout << j <<"*"<<i<<"="<<i*j<<" "; j++; } cout << endl; i++; } system("pause"); }
数组 函数 指针 结构体
-
数组
a). 一维数组
int a[n]、int a[n]={1……n}、int a[] ={1……m}
a[0]……a[n-1] n-1 = sizeof(a)/sizeof(a[0])-1
int length = sizeof(数组名)/sizeof(数组名[0]);计算数值大小很常用。
冒泡练手
如何理解冒泡:将一维操作设想成二维操作,外层循环为列操作,内层循环为行操作#include <iostream> using namespace std; int main() { //cout << "hehe" << endl; int a[5] = {2,5,8,1,3}; int t = 0; //遍历下标操作:遍历数组每一个元素 //寻找最大的一个元素,寻找j次 for (int j = 0; j < 5-1; j++) { //对元素值操作: //i < 5 - j-1:表示当前轮数(i)和已经排好的最大元素(j) //寻找到最大的元素,并移动 for (int i = 0; i < 5 - j-1; i++) { //从前向后比较,找到数组中相邻最大元素并后移 if (a[i] > a[i + 1]) { t = a[i]; a[i] = a[i + 1]; a[i + 1] = t; } } } for (int i = 0; i < 5; i++) { cout << a[i] << endl; } system("pause"); }b). 二维数组
int a[m][n]; int a[][] = {n,m}; int a[][m]={n,m}
a[0][0] = 1;a[行][列] -
函数
返回值类型 函数名 (参数列表)
函数体
例子#include <iostream> using namespace std; int add(int a, int b)//声明+定义 { return a + b; } int main() { int a, b; cin >> a; cin >> b; cout<<add(a, b); system("pause"); }函数的分文件
a). 创建后缀名.h的头文件
b). 创建后缀名.cpp的源文件
c). 在头文件中写函数声明
d). 在源文件中定义函数

-
指针
int a = 0; int *p; || 不可访问:int *p =NULL;int *p = (int *)0x1100;
指针记录变量的地址:p = &a; *p = a;
有人说这样理解:&取地址 *解地址,感觉理解的还不错
常量指针(常量不可以修改,变量可以修改):const int *p = &a;指针指向可以改,指针指向存储值不可以改 N:*p = 20; Y:p = &b; - 指针常量:指针指向不可以改,指向值可以修改:int * const p = &a; Y:*p = 20; N:p = &b;const int * const p = &a:皆不可改 const(修饰表示不可以改) -
指针+数组 指针+函数
int *p = arr;(数组名就是数组地址)
for *p++ 访问数组
声明:fun(int *p1,int *p2) 调用:fun(&p1,&p2),地址传递能够修改传递值,数值传递不能够修改传递值。 -
结构体(自定义数据类型)
定义:struct 结构体名字 {结构体成员列表int char string};
结构体+数组:
struct Student{int age;string name;}xiaoming;
struct 结构体名 数组名 = {{}, {}}
struct Student arr [] {{},{},}#include <iostream> #include<string> using namespace std; struct Student { string name; int age; int score; }; int main() { struct Student stuArry[2]= { {"zhang",12,100}, {"li",23,120} }; stuArry[1].name = "wang"; cout << stuArry[1].name<< endl; system("pause"); return 0; }结构体+指针
structstudent s={int age};
structstudent *p = &s; p->age;
结构体+结构体 根据二维数组类别记忆#include <iostream> #include<string> using namespace std; struct Teacher {string name;}; struct Student { string name; int age; int score; struct Teacher stu;//stu 类型需要提前定义 }; int main() { struct Student stuArry[2]= { {"zhang",12,100}, {"li",23,120} }; stuArry[1].name = "wang"; cout << stuArry[1].name<< stuArry[0].stu.name<<endl; system("pause"); return 0; }结构体作为参数传递(值传递,地址传递),总结所有参数传递的中医理解:
理解\类型 地址传递 值传递 中医药柜(参数列表) 药盒子里装了黄芩(且盒子上有黄芩标签) 药盒子里装了黄芩(但盒子上没有黄芩标签) 递理解 使用黄芩治疗发热 使用黄芩治疗发热 改理解 黄芩标签贴到了苦参药盒上(修改了标签指向的内容) —相当于复制一份,对复制内容修改— 结构体+const
const student *p;既能够传递数值(传递的是地址),又能减少内存空间使用,但是数据值不能修改。
做些实例吧!
C++进阶
内存相关问题
- 内存分区(处理):代码区(操作系统)、堆(程序员【系统】)、栈(编译器)、全局(变量和常量)
程序运行之前数据存储:代码区+全局区 - 代码区:存放CPU中二进制机器指令,共享,只读
- 全局区:程序结束后,由操作系统控制,变量,常量(局部变量、局部常量不在全局区)
运行后数据存储:栈+堆 - 栈区:编译器控制数据(局部变量,形参),函数不要返回局部变量地址(函数执行结束栈区自动释放)
- 堆区:程序运行之后划分的区域,程序员操作(系统回收)
new 关键字 :new 数据类型;int *p = new int (10)//int *p局部变量在栈上,用new开辟堆区域;new 返回指针(返回一个存放整形数字10的地址指针)
delete关键字:delete 数据类型;delete[] arr; delete p;
内存问题+函数传值一起思考局部变量不可以做为返回值
引用 指针与引用 函数 类和对象
-
引言本质:指针常量;int & a = b《===》int *const a = &b;
给变量起别名;数据类型 &别名 = 原名; int a = 10;int &b = a; 指向内存,修改别名原名内存数据皆改变。
引用必须初始化int &b= a,初始化后不可改变。voad (a,b) ;声明定义void(int &a,&b) -
指针与引用:指针:数据类型 *指针名 ;int *p;可以b不用初始化;*p++;指针可以改变,引用不可以;
当用引用作为函数的参数时,其效果和用指针作为函数参数的效果相当;指针需要分配内存空间存储指针变量,引用不需要。 -
常量引用:const修饰
const int & a = 20《===》int temp = 2;const int &a = temp;
void(a) void (const int &a)//参数值不能修改 -
函数,调用fun(3) ;定义int fun(int c,int a= 0,int b= 2)//函数参数列表默认值,若调用时未传递时使用。若果某个位置有参数,那么从此位置到右边都需要参数。函数声明有函数定义不可以有都有默认参数。
-
函数,调用int fun(int c,int)站位参数,调用fun(a, b)。站位参数默认参数。
-
函数,函数重载。同一个作用域,同一个函数名(参数不同,个数不同,顺序不同)。int a=10; fun(a); fun (int);;;
fun(10)fun(const int)引用重载,重载默认参数。函数重载 默认参数 函数引用 引用重载 fun(int a) ;fun(int a, int b) fun(int a,int b= 10) ;fun(int a,int ) fun(int *a) fun(int *a); fun(const int a) fun(a) ;fun(a,b) fun(a); fun(a,b) fun(&a) fun(&a); fun(10) - 类和对象;
面向对象三大特征:封装、继承、多态
class A{public: int a; };//类
A a;//对象,实例化
a.m= 10;//调用
封装 继承 多态 属性+行为(变/常量+函数);权限 r class 类名{访问权限:属性、行为}; 可能由于毕业事情太烦躁,之前未完成便到这里吧,下篇从新开始。
- 类和对象;

4877

被折叠的 条评论
为什么被折叠?



