C++学习整理笔记 第二天

本文整理了C++的高级语法,包括面向对象编程的内存分区模型、引用、函数,以及类和对象的封装、访问权限、构造函数、析构函数、构造函数的使用规则。深入探讨了静态成员、友元、运算符重载、继承和多态的概念,强调了动态多态的实现与虚函数的重要性。
摘要由CSDN通过智能技术生成

C++高级语法

根据 bilibili黑马程序员视频 网上资料 自己理解 整理的部分资料C++语法

一、面向对象编程

1. 内存分区模型

代码区:操作系统管理,存放函数二进制代码的区域。特点:共享、只读

全局区:操作系统管理其生命周期,存放全局变量、静态变量和常量(包括const修饰的全局常量 和 字符串常量)。

栈区:编译器自行分配释放,存放函数的参数值(形参) 局部变量等。注意:不要返回局部变量的地址。

堆区:程序员分配释放,程序结束时操作系统回收堆区内存,关键字 new

注意:程序运行前划分为代码区和全局区,运行后分为栈区和堆区。

关键字 new

语法:new 数据类型,释放利用关键字 delete,语法:delete 数据类型
注意:new 创建的数据会返回该数据类型对应的指针

//定义在函数内部的变量一般是局部变量,在函数体外定义的变量属于全局变量
static int a = 10; // 静态变量

void* func(){
   
	int* p = new int(10); //在堆区开区数据
	return p;		//指针本质上局部变量,存放在栈区,但指针保存的数据保存在堆区
	int* arr = new int[10]; //定义一个大小是10的数组,保存的是首地址
	delete [] arr; // 数组释放时,添加[]
	}
int main(){
   
	int* p = func();
	cout << *p << endl; //输出结果为 10
	delete p; //释放堆区中的 p
	}

2. 引用

语法:数据类型 &别名 = 原名,用于给变量起别名。注意:引用必须初始化,初始化后不允许改变了

用途1:引用传递,形参会影响实参,简化了指针修饰实参,通过引用参数产生的效果与地址传递的相同

用途2:函数返回值,不能返回局部变量的引用,若函数变量作为左值出现,必须返回引用。

引用的本质在C++内部是一个指针常量,相当于int* cosnt b = &a;,发现引用时自动转换成 解引用

常量引用:用于修饰形参,防止误操作,即在函数中常量引用后不能修改形参的值。

int a = 10; 
int c = 20;
int &b = a; //b为a的别名,相当于 int* cosnt b = &a;
int &b; //错误,b没初始化
b = c; //这不是更改为c的别名,而是幅值操作,即 a = 20 了现在

int test(){
   
	static int a = 10;
	return a;
	}
int main(){
   
	int &b = test(); //b作为a的别名,值为10
	test() = 1000; // test函数返回的是静态变量a的本身,这句话相当于赋值语句,即a = 1000
	cout << b << endl; // 输出b的值也是1000,因为b是a的引用
}

int &b = 10; //错误,引用必须引一块合法的内存空间
const int &b = 10; //正确,加入const后变为只读,这句话相当于int temp = 10; + const int &b = temp;

3. 函数

默认参数:返回值类型 函数名(形参 = 默认值){ },没有输入值就使用默认参数。注意:函数声明函数实现 只能有一个默认参数。

占位参数:返回值类型 函数名(数据类型){ },占位参数可以有默认值。

函数重载:允许函数名相同,提高复用性。需要满足的条件:在同一个作用域下,函数名相同,但函数的参数类型、个数、顺序至少有一个不同。函数的返回值不能作为函数重载的条件,即仅有函数返回值不同,无法重载。
注意:引用作为重载条件 与 函数重载 碰到 默认参数 时会出错,出现二义性,应尽量避免这种现象。

int func(int a = 10, int b = 20, int c = 30); // 函数声明,添加默认参数
int func(int a, int b, int c){
     // 函数实现
	return a +
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值