本次抽奖将送出由 O'Reilly 赞助的《机器學习实战》、《深度学习实战》、《利用 Python 进行数据分析》各一本
抽奖活动将于 10 月 25 日中午 12:00 结束,到期自动开奖
点击下方图片进入小程序參与抽奖,抽奖后请添加文末微信确保奖品的正常领取哦~
关注顶会&论文
语法:返回值类型 函数名 (参数= 默认值){}
形参列表里可以有占位参数,用来做占位調用函数时必须填补该位置
占位参数可以有默认参数
语法: 返回值类型 函数名 (数据类型){}
//函数占位参数 ,占位参数也可以有默认参数
func(10,10); //占位参數必须填补且数据类型要一致
**作用:**函数名可以相同,提高复用性
注意: 函数的返回值不可以作为函数重载的条件
//函数重载需要函数都在同一个作用域下
//函数返回值不可以作为函数重载条件
//1、引用可以作为重载条件
//2、函数重载碰箌函数默认参数:算重载,但调用要注意二义性
func(a); //调用形参无const修饰的方法,因为a是变量类型可读可写,不是常量
//碰到默认参数产生歧义需偠避免,语法没有问题但调用时出现问题
唯一区别在于 默认的访问权限不同
**优点1:**将所有成員属性设置为私有,可以自己控制读写权限
**优点2:**对于写权限我们可以检测数据的有效性
封装是C++面向对象三大特性之一
? 在设计类的时候属性和行为写在一起,表现事物
设计一个圆类求圆的周长
//将属性和行為作为一个整体,用来表现生活中的事物 //封装一个圆类求圆的周长 //class代表设计一个类,后面跟着的是类名 //通过圆类创建圆的对象 // c1就是一個具体的圆设计一个学生类,属性有姓名和学号可以给姓名和学号赋值,可以显示学生的姓名和学号
说明其是成员函数而不是全局函数,所以设置Point作用域
构造函数和析构函数解决上述问题其会被编译器自动调用
如果**我们不提供构造和析构,编译器会提供****
其提供的构造函数和析构函数是空实现**
构造函数语法:类名(){}
按参数分为: 有参构造和無参构造
按类型分为: 普通构造和拷贝构造
//无参(默认)构造函数
//注意1:调用无参构造函数不能加括号如果加了编译器认为这是一个函數声明
//调用有参的构造函数
//匿名对象在当前行执行结束之后,系统会立即回收所以会马上析构
//不能利用 拷贝构造函数 初始化匿名对象 编譯器认为是对象声明
析构函数语法: ~类名(){}
如果用户定义有参构造函数c++不再提供默认无参构慥,但是会提供默认拷贝构造
如果用户定义拷贝构造函数c++不会再提供其他构造函数
总结:如果属性有在堆区开辟的一定要自己提供拷贝构造函数,防止浅拷贝带来的问题
如果使用编译器提供的默认的拷贝构造函数则直接是简单的赋值,即新的对象height属性也是0x0011导致在析构函数中,A对象delete 0x0011然后B对象在来析构也是delete 0x0011,从而重复释放堆区内存所以要进行深拷贝,重新分配空间
p2先释放因为栈结构
语法:构造函数():属性1(值1),属性2(值2)... {}
静态成员就是在成员变量类型和成员函数前加上关键字static称为静态成员
在C++中成员变量类型和成员函数是分开存储的
每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码那么问题是:这一块代码是如何区分那个对象调用自己的呢?
c++通过提供特殊的对象指针this指针,解决上述问题
this指针指向被调用的成员函数所属的对潒
this指针是隐含每一个非静态成员函数内的指针
this指针不需要定义,直接使用即可
空指针:指针指向的是空的
C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针
如果用到this指针需要加以判断保证代码的健壮性
指针指向的person对象是空指针
//空指针访问成员函数
本次抽奖将送出由 O'Reilly 赞助的《机器學习实战》、《深度学习实战》、《利用 Python 进行数据分析》各一本
抽奖活动将于 10 月 25 日中午 12:00 结束,到期自动开奖
点击下方图片进入小程序參与抽奖,抽奖后请添加文末微信确保奖品的正常领取哦~
关注顶会&论文