老九C++零基础学习(十五)类和对象

15.2 搞个对象

补充 :https://blog.youkuaiyun.com/weixin_44086593/article/details/88699833

外部不能直接访问类的私有成员。
在这里插入图片描述
在这里插入图片描述
.hpp 和 .h 文件的区别
在这里插入图片描述
在.h文件中:(只有构造函数和析构函数的声明)
在这里插入图片描述
在.hpp文件中:(声明并实现构造、析构函数)
在这里插入图片描述
成员函数的定义:
可以在类中直接写出,即内联函数;
或者在外部写出:
返回值类型 类名::成员函数名(参数列表) { }
举例:
在这里插入图片描述

15.3 访问修饰符

在这里插入图片描述
private 排在首位时可以省略,默认成员为私有成员。

对象的创建:

其实可以把类的创建看成是一个数据类型的创建,只不过是这个数据类型带有成员;
在创建对象时,类名就相当于数据类型,对象名就相当于变量名:

int i;
类名 对象名; 

如果类的构造函数中有参数,那么就变成:

类名 对象名(参数列表); 

动态创建
可以用动态分配内存的方法创建对象:

类名* 对象名 = new 类名(参数列表);

delete 对象名; //  有new 必须有delete

此时,成员变量的调用不在用’.’,而变成:

对象名->成员;
或者
*对象名.成员;

堆与栈
  直接定义和创建的变量、函数和类对象等是静态的,在他们所在函数开始时就已经为他们在栈中开辟了空间,函数结束时会自动释放。好管理,不用担心内存泄漏问题。但是栈的空间有限,如果代码量很多的时候,并不适合将所有的东西都放在栈中。
  动态创建的变量、函数和对象等都是在堆中存放,不会因为函数的结束而自动释放,所以适合传参。但是问题也很明显,如果没有好好的管理和销毁,那么会造成严重的内存泄漏。

15.4 构造函数

在这里插入图片描述
补充:
a.构造函数时可以以重载的形式存在的。

b.如果只有一个单参构造函数,可以写成以下方式来创建对象:

类名 对象名 = 某某;

c.在编写构造函数的实现时,可以以参数列表形式编写:

类名::类名(string name, int age) : m_name(name), m_age(nume)

析构函数
在对象被销毁或自动释放的时候自动调用,同样没有返回值类型。

15.8 this指针

在这里插入图片描述
指的是该对象本身:
在每个成员函数生成的时候,自动传入的指针,用法如下:
在这里插入图片描述
补充:
 静态函数(static函数)与普通函数的区别:
  用static修饰的函数,本限定在本源码文件中,不能被本源码文件以外的代码文件调用。而普通的函数,默认是extern的,也就是说,可以被其它代码文件调用该函数。
  在函数的返回类型前加上关键字static,函数就被定义成为静态函数。普通 函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。因此定义静态函数有以下好处:
  <1> 其他文件中可以定义相同名字的函数,不会发生冲突。
  <2> 静态函数不能被其他文件所用

this 返回当前对象的引用
在这里插入图片描述
举例两对象对比,返回分数高的一个对象:
在.h中:
在这里插入图片描述
在cpp中:
在这里插入图片描述
可以看出自动返回了分数高的对象,并可以对该对象进行操作。

注意:
  成员函数的结尾声明为const,函数内不允许修改对象本身,调用本对象非const方法就会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值