C++ —— 封装(1)

(部分内容来自慕课网)

类和对象

在这里插入图片描述
根据不同的目的抽象不同的信息
封装:选择性暴露 访问限定符:public、protected、private

对象实例化
从栈中实例化(自动回收
在这里插入图片描述
从堆中实例化(需要手动将申请的内存释放
在这里插入图片描述

对象的访问
栈中使用
在这里插入图片描述
栈中使用
在这里插入图片描述
new申请一个对象,使用完之后需要delete,并指向NULL

Demo
在这里插入图片描述
定义了一个类,通过栈和堆两种不同的方式对类的对象进行实例化和访问。
其中堆的方式,new、delete、p=NULL等需要特别注意


初始化string

在这里插入图片描述
+加号可以连接字符串和变量,不可以将纯字符串连接#include
在这里插入图片描述


数据的封装

以对象为中心,将所有问题通过调用成员函数的方式来解决。
Demo:
声明类,对象和方法
在这里插入图片描述
在这里插入图片描述


类外定义

类内定义:在类内部定义成员函数的函数体。会优先编译为内联函数
内联函数:inline,在调用时之间用函数的函数体替换调用语句,执行速度快,仅限于简单的函数
类外定义:成员函数的函数体写在类的外面,分为同文件类外定义和分文件类外定义

同文件类外定义
先对类进行声明:
在这里插入图片描述
类的声明之后,在类外进行定义:
在这里插入图片描述

分文件类外定义:
先在teacher.h中声明类
在这里插入图片描述
然后在 teacher.cpp 中定义类,需要包含头文件 teacher.h
在这里插入图片描述
最后main函数
在这里插入图片描述


构造函数

内存分区:
栈区:	int x = 0; int *p = NULL;	//定义变量等,内存自动管理
堆区:	int *p = new int[20];		//程序员手动管理内存
全局区:	存储全局变量及静态变量
常量区:	string str = "hello";		//字符串、常量
代码区:	存储逻辑代码的二进制		//编译后的二进制代码

构造函数

  • 在对象实例化时被自动调用
  • 构造函数名与类同名
  • 构造函数没有返回值
  • 构造函数可以被重载
  • 实例化对象是仅使用一个构造函数
  • 用户没有定义时,程序会自动生成一个构造函数定义时,程序会自动生成一个构造函数

声明构造函数:
在这里插入图片描述
定义构造函数:
在这里插入图片描述
在main中实例化对象
在这里插入图片描述
t1、t2、t3分别为无参数、有完整参数、有部分参数,根据参数的情况选择不同的构造函数。

在声明构造函数时,如果给参数name也给了默认值:
在这里插入图片描述
那么在实例化对象t1的时候编译器报错:
在这里插入图片描述
编译器无法判断t1对应的构造函数,应避免这种声明方式


默认构造函数:实例化时不需要传递参数的构造函数
构造函数初始化列表:
在这里插入图片描述
初始化列表先与构造函数执行,初始化列表只能用于构造函数,初始化列表可以同时初始化多个数据成员

初始化列表的必要性
在这里插入图片描述
已经声明了m_dPi为const,所以不能在构造函数中初始化,只能用初始化列表的形式

类中包含const的成员,则需要在定义的时候使用初始化列表对其进行初始化。
在这里插入图片描述


未完。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值