了不起的 C++入门



欢迎C++入门

你好! 这是我第N+1次 学习C++ 。如果你想学习如何使用C++, 可以仔细阅读这篇文章,了解一下C++的基本语法知识。
如果是大牛欢迎指正交流!!!
我希望能用最简单且最全面的记录学习C++,如果你这样想不妨借给我3 5 分钟,我们一起出发。


第一个C++程序

C++程序编写:

  1. 创建项目

    a. 先下载个VS 网址1 网址2

    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;
    }
    
  2. 创建文件

  3. 编写代码

  4. 运行程序

  5. 调试


注释

  1. 单行多行注释:
    //单行注释
    /*
    多
    行
    注
    释
    */
    

变量 常量 关键字 命名规则

  1. 变量:
    给定指定内存空间 给名 方便管理内存
    //数量类型(int  char ……) 变量名称(命名规则) 数据值(数值范围)
    //例子
    int  a  = 10;
    
  2. 常量: 公认的不变的数据
    举例
    //宏常量 文件上方 不可修改常量
    #define clearLove 7
    //变量常量 函数中 不可修改常量
    const  int Uzi = 666;
    
  3. 关键字(标识符)
    系统已经使用(比如定义的变量、)
    4.** 命名规则(变量 常量 函数)**
    字母、数字、下划线(数字不能第一个)

数据类型 sizeof关键字 转义字符 字符串 bool类型

  1. 数据类型整形: 变量的数据类型(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
    
  2. sizeof : 统计数据类型所占内存大小sizeof(int)

  3. 转义字符: \a 报警 ASCII 007 ‘+*’ ; \n:换行 \\反斜杠 \t 制表符

  4. 字符+字符串: 字符:char str = ‘h’;
    字符串例子:

    //C风格
    char [] str = "C";
    //C++风格
    #include <string>
    string str = "C++"
    
  5. bool类型 bool值: true本质1 false本质0


数据输入 运算符 流程结构

  1. 输入 输入格式important
    例子
    using namespacd std;
    int a = 0;
    cout <<"修改a"<<endl;
    cin>>a;
    cout <<a<<endl;
    
  2. 运算符
    算术运算法:+、-*、*、/、%、++、–;%:取余 做个水仙花数实践
    赋值运算符:+、=、 -=、 /= 、*=
    逻辑运算符:!、|、 &、||、&&
    比较运算符:<、>、<=、>=
  3. 流程结构
    a). 顺序:
    b). 选择:if else 、switch case default 默认执行break跳出选择 、三目运算?:(可以返回值)
    c). 循环:for 、while 、do while break跳出循环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");
    }
    

数组 函数 指针 结构体

  1. 数组
    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[行][列]

  2. 函数
    返回值类型 函数名 (参数列表)
    函数体
    例子

    #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). 在源文件中定义函数
    在这里插入图片描述

  3. 指针
    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(修饰表示不可以改)

  4. 指针+数组 指针+函数
    int *p = arr;(数组名就是数组地址)
    for *p++ 访问数组
    声明:fun(int *p1,int *p2) 调用:fun(&p1,&p2),地址传递能够修改传递值,数值传递不能够修改传递值。

  5. 结构体(自定义数据类型)
    定义: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;
    }
    

    结构体+指针
    struct student s={int age};
    struct student *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++进阶

内存相关问题

  1. 内存分区(处理):代码区(操作系统)、堆(程序员【系统】)、栈(编译器)、全局(变量和常量)
    程序运行之前数据存储:代码区+全局区
  2. 代码区:存放CPU中二进制机器指令,共享,只读
  3. 全局区:程序结束后,由操作系统控制,变量,常量(局部变量、局部常量不在全局区)
    运行后数据存储:栈+堆
  4. 栈区:编译器控制数据(局部变量,形参),函数不要返回局部变量地址(函数执行结束栈区自动释放)
  5. 堆区:程序运行之后划分的区域,程序员操作(系统回收)
    new 关键字 :new 数据类型;int *p = new int (10)//int *p局部变量在栈上,用new开辟堆区域;new 返回指针(返回一个存放整形数字10的地址指针)
    delete关键字:delete 数据类型;delete[] arr; delete p;
    内存问题+函数传值一起思考局部变量不可以做为返回值

引用 指针与引用 函数 类和对象

  1. 引言本质:指针常量;int & a = b《===》int *const a = &b;
    给变量起别名;数据类型 &别名 = 原名; int a = 10;int &b = a; 指向内存,修改别名原名内存数据皆改变。
    引用必须初始化int &b= a,初始化后不可改变。voad (a,b) ;声明定义void(int &a,&b)

  2. 指针与引用:指针:数据类型 *指针名 ;int *p;可以b不用初始化;*p++;指针可以改变,引用不可以;
    当用引用作为函数的参数时,其效果和用指针作为函数参数的效果相当;指针需要分配内存空间存储指针变量,引用不需要。

  3. 常量引用:const修饰
    const int & a = 20《===》int temp = 2;const int &a = temp;
    void(a) void (const int &a)//参数值不能修改

  4. 函数,调用fun(3) ;定义int fun(int c,int a= 0,int b= 2)//函数参数列表默认值,若调用时未传递时使用。若果某个位置有参数,那么从此位置到右边都需要参数。函数声明有函数定义不可以有都有默认参数。

  5. 函数,调用int fun(int c,int)站位参数,调用fun(a, b)。站位参数默认参数。

  6. 函数,函数重载。同一个作用域,同一个函数名(参数不同,个数不同,顺序不同)。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)
    1. 类和对象;
      面向对象三大特征:封装、继承、多态
      class A{public: int a; };//类
      A a;//对象,实例化
      a.m= 10;//调用
    封装继承多态
    属性+行为(变/常量+函数);权限r
    class 类名{访问权限:属性、行为};

    可能由于毕业事情太烦躁,之前未完成便到这里吧,下篇从新开始。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Echo一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值