当前位置: 首页 > news >正文

C++学习笔记01

01.C++概述(了解)

c++语言在c语言的基础上添加了面向对象编程泛型编程的支持。

02.第一个程序helloworld(掌握)

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;//标准命名空间int main()
{//cout是标准的输出流对象,打印字符串,//endl是刷新缓冲区,并换行cout << "hello world!" << endl;system("pause");return EXIT_SUCCESS;
}

03.面向对象的三大特征(了解)

封装,继承,多态

04.命名空间(重点)

1.为什么有命名空间,是因为解决多人合作时取标识符是重命名的问题

2.什么是命名空间

//命名空间
namespace A{//A是空间的名字,int a;void func(){}
}

3.命名空间的注意

注意1:命名空间只能写在全局
注意2:命名空间可以嵌套命名空间
//命名空间可以嵌套命名空间
namespace Maker
{int a;namespace B{int b;}
}
注意3:命名空间是开放,随时可以加入新成员,但是新成员只能在加入后使用
namespace Maker
{int a;namespace B{int b;}
}
namespace Maker
{int c;
}
注意4:匿名命名空间
//类似于static int d=50;
namespace
{int d = 50;
}
注意5:命名空间可以取别名
void test01()
{//			新名字    旧名字namespace nameMaker = Maker;cout << nameMaker::a << endl;
}
注意6:分文件编写代码时,如果.h中有两个命名空间,但是里面的成员函数或成员变量同名时,在.cpp中实现函数时,需要加上命名空间
test.h文件
#pragma once
#include<iostream>
using namespace std;namespace myMaker1
{void func();
}namespace myMaker2
{void func();
}test.cpp文件
#include "test.h"
void myMaker1::func()//需要在函数名前面加入确定命名空间名字
{cout << "func" << endl;
}

4.作用域运算符

用来访问某个作用域里面的成员

05.using声明和编译指令(重点)

using声明是让命名空间中某个标识符可以直接使用

namespace A
{int a = 10;int b = 20;int c = 30;
}void test01()
{//using声明是让命名空间中某个标识符可以直接使用using A::a;cout <<a << endl;//int a = 50;//注意:using声明了某个变量,在该作用域内不能定义同名的变量
}

using编译指令,让某个命名空间中的标识符都可以直接使用

namespace A
{int a = 10;int b = 20;int c = 30;
}
void test02()
{//using编译指令,让某个命名空间中的标识符都可以直接使用using namespace A;cout << a << endl;cout << b << endl;cout << c << endl;int a = 100;//为什么不会冲突//类似于命名空中的a是全局变量,这里的a的局部变量cout << "a=" << a << endl;}

06.struct类型加强(重点)

加强一:定义变量时不需要使用struct

加强二:结构体内可以写函数

07.更严格的类型转换(了解)

不能隐性的转换,必须显示的转换

08.三目运算符(了解)

c语言的三目运算符返回的是右值

C++语言的三目运算符返回的是左值,是空间

放在赋值操作符左边的是左值,放在右边的是右值

09.C/C++的const(重点)

1.C语言的const修饰的变量都有空间

2.C语言的const修饰的全局变量具有外部链接属性

3.C++语言的const修饰的变量有时有空间,有时没有空间(发生常量折叠,且没有对变量进行取址操作)

const int aa = 10;//没有内存void test01()
{//发生了常量折叠cout << "aa=" << aa << endl;//在编译阶段,编译器:cout<<"aa="<<10<<endl;//禁止优化volatile//volatile const int bb = 20;//栈区const int bb = 20;int *p = (int*)&bb;//进行了取址操作,所以有空间*p = 200;cout << "bb=" << bb << endl;//cout << "bb=" << 20 << endl;cout << "*p=" << *p << endl;cout << "a的地址=" << (int)&bb << endl;cout << "p指向的地址" << (int)p << endl;}

4.C++语言中const修饰的全局变量具有内部链接属性

extern const int c = 300;//加上extern就变为外部链接属性

5.C++编译器不能优化的情况

​ 1.不能优化自定义数据类型

​ 2.如果用变量给const修饰的局部变量赋值,那么编译器就不能优化

​ 3.编译器是在编译阶段来优化数据

6.尽量用const替代define

​ 1.define没有数据类型,const修饰的变量有数据类型,可以进行数据类型检查

#define MA 128
const short ma = 128;
void func(short a)
{cout << "func(short a)" << endl;
}void func(int a)
{cout << "func(int a)" << endl;
}
int main()
{func(ma);system("pause");return EXIT_SUCCESS;
}

​ 2.const修饰的变量有作用域,define不重视作用域,不能限定常量的使用范围

10.引用(重点难点)

1.引用是做什么:和C语言的指针一样的功能,并且使语法更加简洁

2.引用是什么:引用是给空间取别名

3.引用的语法

void func(int &a)//int &a=a;
{a = 200;
}void test02()
{int a = 10;func(a);cout << "a=" << a << endl;
}

4.引用的注意

注意1:int &b = a;这里&不是取地址操作符,是引用的标记作用
注意2:引用创建时,必须初始化。//int &pRef;err
注意3:引用一旦初始化不能改变它的指向
注意4:引用必须引用一块合法的内存空间

5.数组的引用

int main()
{int arr[] = { 1, 2, 3, 4, 5 };//第一种方法(常用)//1.定义数组类型typedef int(MY_ARR)[5];//数组类型//2.建立引用MY_ARR &arref = arr;//建立引用,int &b=a;//第二种方法(常用)//直接定义引用int(&arref2)[5] = arr;// int &b=a//第三种方法typedef int(&MY_ARR3)[5];//建立引用数组类型MY_ARR3 arref3 = arr;for (int i = 0; i < 5; i++){cout << arref[i] << endl;}cout << endl;for (int i = 0; i < 5; i++){arref2[i] = 100 + i;cout << arref2[i] << endl;}system("pause");return EXIT_SUCCESS;
}

6.引用的本质(了解)

引用的本质是编译器在内部使用常指针来实现

//发现是引用,转换为 int* const ref = &a;
void testFunc(int& ref){ref = 100; // ref是引用,转换为*ref = 100
}
int main(){int a = 10;int& aRef = a; //自动转换为int* const aRef = &a;这也能说明引用为什么必须初始化aRef = 20; //内部发现aRef是引用,自动帮我们转换为: *aRef = 20;cout << "a:" << a << endl;cout << "aRef:" << aRef << endl;testFunc(a);return EXIT_SUCCESS;
}

11.指针的引用(重点难点)

1.指针的引用是给指针变量这块空间取别名

void test01()
{char* p = "翠花";char* &p1 = p;cout << p1 << endl;
}//被调函数
void func(char* &tmp)//char* &tmp=mp;
{char *p;p=(char*)malloc(64);memset(p, 0, 64);strcpy(p, "小花");tmp = p;//省了*
}
//主调函数
void test02()
{char* mp = NULL;func(mp);//省了&cout << mp << endl;
}

12.C和C++的区别(了解)

1.C语言的结构体不能写函数,C++可以

2.结构体定义变量时,C++不需要加struct关键字

3.更加严格的类型检查

4.const修饰的变量,C++有时没有内存,C语言的都有内存

5.三目运算符返回的值不一样

6.引用和C语言的指针功能一样

http://www.lryc.cn/news/262035.html

相关文章:

  • 【UE5】初识MetaHuman 创建虚拟角色
  • 物流实时数仓:数仓搭建(DWD)一
  • MATLAB安装
  • C语言——预处理详解(#define用法+注意事项)
  • Linux(23):Linux 核心编译与管理
  • Oracle RAC环境下redo log 文件的扩容
  • Java入门学习笔记一
  • 分布式块存储 ZBS 的自主研发之旅|元数据管理
  • 六大设计原则
  • dockerfile创建镜像 lNMP+wordpress
  • 深入理解——快速排序
  • 【代码随想录】算法训练计划50
  • 【数据分享】2019-2023年我国区县逐年二手房房价数据(Excel/Shp格式)
  • Redis设计与实现之整数集合
  • [Kubernetes]2. k8s集群中部署基于nodejs golang的项目以及Pod、Deployment详解
  • 讯飞星火大模型api调用
  • TCP与UDP:网络世界中的“顺丰快递”与“广播电台”
  • 升级Xcode15,iOS17后问题解决
  • RabbitMQ搭建集群环境、配置镜像集群、负载均衡
  • leetcode:457. 环形数组是否存在循环
  • Kafka集成springboot
  • Unity中实现ShaderToy卡通火(移植篇)
  • 指针相关知识(进阶)
  • 怎么将文件变为可执行文件
  • 5373. 中等计算
  • 极智一周 | 两系列汇总、MI300X、H100、特供芯片、GPT-4、火灾检测、酷睿Ultra And so on
  • leetcode刷题日志-383赎金信
  • K8s(九)—volume.md
  • python N个人围成一圈报数 报到3出列 直到只剩下最后一人
  • RFC4861 中文版下