C++ 类和对象、默认函数

类和对象

类简单来说就是将方法和定义封装到一块,类似于“结构体”的一个变量,与结构体不同的是,结构体中只有变量,而类中不仅有变量,还有对变量操作的方法。
写一个简单的类

calss A
{
friend class B;
public:   //公共的(该文件中的任意位置都可以访问)
	int Max(int a,int b)
	{
		return a > b ? a : b;
	} 
private:   //该类私有的(只有该类的成员才能访问)
	int a;
	char b;
	char *c;
protected:    //本类和子类类中的变量可以访问

}

private 关键字:类默认的访问限定,将其中的实现细节隐藏,对外只提供接口
该类中的方法实现在类中,也可以在类外实现,但必须在类中声明;
类外实现需要添加空间作用域;

类成员方法使用:
①本类变量直接访问
②非本类的变量访问则需要在本类的类中声明友元函数,如上面的代码,需要注意的是
友元关系是单向的,而本类不可以访问该类中的方法
友元关系会破坏封装性,不安全,尽量不要使用

使用类成员方法时
①类中的方法以内联函数的形式展开
②类外的函数以普通函数压栈入栈的方式调用
调用类成员方法,生成函数符号时,用_thiscall调用约定;函数自带this指针,指向该
类的入口地址

类中默认的六个函数

①构造函数
②析构函数
③拷贝构造函数
④赋值运算符的重载函数
⑤取地址操作符的重载函数
⑥const修饰的取地址操作符的重载函数

默认函数如果用户不提供,则由系统提供;反之亦然

构造函数
作用:给对象的内存做初始化
函数名:与类名相同,无返回值
参数:参数数目由用户确定
构造函数可以重载,只能由系统调用
不依赖对象
默认的构造函数体为空

析构函数
作用:释放对象所占的资源(除了栈以外的资源)
函数名:~+类名
参数:对象
可以由用户调用(但不建议),系统一定会自己调用,调用两次会使程序直接奔溃
依赖对象
不可以重载

拷贝构造函数
作用:用一个已存在的对象生成一个同类型的对象
函数名:与类名相同
参数:一定写成引用的形式
如果不加引用将递归调用该函数,形成死循环导致栈溢出,程序奔溃,无法生成形参对象
系统提供的构造函数为浅拷贝,当有指针存在时,会使两个指针指向同一块内存块,析构
函数调用时,该内存块将重复释放,导致程序奔溃
深拷贝:为指针new一个新得内存块,其他的数据依次赋值

赋值运算符的重载函数
作用:用一个已存在得对象给相同类型得对象赋值
函数名:类名+&+operator+=()
参数:对象

步骤:
①自赋值判断
②释放旧资源
③生成新资源
④赋值

注意:有指针时也需要深拷贝

拷贝构造函数与赋值运算符的重载函数区别:

拷贝构造函数从字面上看,是属于构造函数,因此,拷贝构造函数和构造函数一样,也是为了生成新对象 。相反,赋值运算符的重载函数则不会生成新对象,它是给一个已存在的对象赋值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值