做视频网站怎么挣钱,兰陵网站建设,浏览器下载安装,专业的单位网站开发公司目录
前言
正文
类封装
为什么要进行类封装
概念
访问修饰符
构造函数
概念
特点
析构函数
概念
特点
再谈面向过程与面向对象
面向过程
代码举例
面向对象 代码举例
结语
下期预告 前言 在学习过【C语言进阶C】 C基础--让你丝滑的从C语言进阶到C 之后】 C基础--让你丝滑的从C语言进阶到C 之后相信小伙伴们已经对C面向对象的思维和C中的一些语法有一定的了解了那么我们继续往下学习本次要学习的内容非常重要那就是---类它会在接下来的学习道路上扮演十分关键的角色。大家好好看好好学 正文
类封装
为什么要进行类封装
C语言中一般是由数据和算法组成数据和算法彼此独立关联性不强在C中将相互关联数据和算法封装起来形成结构体或类无论类还是结构体都是一个抽象的概念只有定义类的变量时数据才会真实存在这个变量我们称之为对象C程序过程中尽量避免单独的数据和算法而是由一个类对象组成的这就是面向对象。
概念
类class完成某一功能的数据和算法的集合是一个抽象的概念。
对象类的一个实例具体的概念是真正存在于内存中的。 定义类的关键字class类名一般以大写的C开头成员属性一般以m_开头。
class CTest {int m_a; //成员属性成员变量void show(); //成员方法成员函数
};
访问修饰符
类成员访问修饰符描述了类成员的访问控制即所能使用的一个范围共有的public、保护的protected、私有的private默认。 public 对外公开在类内、类外都可以使用。 protected 在类内和子类中可以使用。 private 只能在类内使用。 对于类内的私有成员我们可以提供访问接口get***,set***来按照一定的规则进行访问。 构造函数
概念
通常在定义变量时要初始化在定义类对象时成员属性并没有得到初始化。C类提供了一种特殊的函数——构造函数。
构造函数其作用是用来初始化类成员属性。空类中存在一个默认的无参数的构造函数名为当前类名无返回值。
class CTest {CTest (){} //默认无参构造
};
特点
构造函数并不需要我们手动调用在定义对象的时候会自动调用这个默认的无参构造是编译器给提供的函数体代码为空所以在定义对象时虽然调用了但并没有真正给成员初始化。所以多数情况下需要我们手动重构构造函数。
一个类中的构造函数允许存在多个他们是函数重载的关系重构的构造函数可以指定参数来符合我们需要的初始化过程。
注意
只要重构了任何的构造函数编译器将不会再提供那个默认的无参构造了。定义多个对象可能会执行不同的构造这就要看在定义对象时如何指定参数了会根据参数的类型、数量自动匹配对应的构造但一个对象最终只能执行其中一个构造。
析构函数
概念
析构函数与构造函数相对应的析构函数其作用是用来回收类中成员申请的额外空间而不是对象本身。空类中存在一个默认的析构函数函数名为~类名无返回值无参数。
class CTest {
~CTest(){ } //默认构造
};
特点
构造函数在对象的生命周期结束的时候自动调用编译器提供的默认的析构函数体代码也为空我们可以手动重构一旦重构编译器就不会再提供那个默认析构了与构造不同的是析构函数只允许存在一个。
注意
析构在真正回收对象内存空间之前去调用额外的空间回收完后才真正回收对象内存空间。
再谈面向过程与面向对象
面向过程
面向过程编程Procedure-Oriented Programming简称POP是一种编程模型也是初始踏入编程时接受的思想过程即有一系列要执行的计算步骤以过程为中心依次把要解决问题的步骤、流程分析出来用函数封装好形成一个一个的模块在主流程中按照具体的步骤调用相应的函数。
面向过程编程的主体是函数模块它以函数为中心始终关注的是怎么一步一步解决问题从而实现函数的顺序执行。
总结自上向下顺序执行、逐步细化。
代码举例
把大象放进冰箱
void OpenRefrigerator(){cout 用手抓住冰箱门把手 endl;cout 缓慢打开门 endl;cout 拉到一定大的角度 endl;
}void PushElephant(int * p_refrig,int h_refrig,int h_ele){cout 找到冰箱的最大格子 endl;if(h_refrig h_ele){cout 压缩一下大象 endl;h_ele 5;}p_refrig h_ele;cout 大象放到冰箱里 endl;
}void CloseRefrigerator() {cout 开始推动冰箱门 endl;cout 继续推动冰箱门 endl;cout 冰箱门严丝合缝 endl;
}int main() {int heightEle 10; //大象的高度int heightRefrig 10; //冰箱的高度int * pEle nullptr; //冰箱里装的东西//---------开始打开冰箱-------------------OpenRefrigerator();//----------结束打开冰箱--------------------//----------开始装大象--------------------PushElephant(pEle,heightRefrig,heightEle);//----------结束装大象------------------------//----------开始关闭冰箱----------------------CloseRefrigerator();//-----------结束关闭冰箱---------------------return 0;
}
面向对象
面向对象编程Object-oriented programming简称OOP面向对象编程是一种编程模型以对象数据为中心它把要解决的问题分解成各个对象变量、数据而不是各个流程、步骤更专注于对象与对象之间的交互而不是数据和方法、方法与方法建立对象的目的不是为了完成一个步骤而是为了描述某个对象在解决整个问题步骤中的属性和行为。涉及到的属性和方法都被封装到一起包含在其内部。
世界上的每个事物都可以是一个独立的对象其都有自己的属性和行为对象与对象之间通过方法来交互。
面向对象编程的分析问题步骤分析问题中参与其中的哪些实体这些实体应该有什么属性和方法我们如何通过调用这些实体的属性和方法去解决问题。现实世界中任何一个操作或者是业务逻辑的实现都需要一个实体来完成实体就是动作的支配者没有实体就没有动作发生。 代码举例
//定义大象的类
class CElephant {
public: int heightEle;
public:CElephant(int h) :height(h) {}
};//定义冰箱类
class Refrigerator {
public:int heightRefrig;CElephant* pEle;
public:Refrigerator(int h) :heightRefrig(h),pEle(nullptr){}void OpenRefrigerator() {cout 用手抓住冰箱门把手 endl;cout 缓慢打开门 endl;cout 拉到一定大的角度 endl;}void PushElephant(CElephant ele){cout 找到冰箱的最大格子 endl;if(heightRefrig ele.heightEle) {cout 压缩一下大象 endl;ele.heightEle 5;}pEle ele;cout 大象放到冰箱里 endl;}void CloseRefrigerator() {cout 开始推动冰箱门 endl;cout 继续推动冰箱门 endl;cout 冰箱门严丝合缝 endl;}
};int main() {Refrigerator refrig(10);CElephant ele(10);//---------开始打开冰箱-------------------------refrig.OpenRefrigerator();//----------结束打开冰箱------------------------//----------开始装大象------------------------refrig.OpenRefrigerator();//----------结束装大象------------------------//----------开始关闭冰箱------------------------refrig.CloseRefrigerator();//----------结束关闭冰箱------------------------return 0;
} 结语
下期预告
下次我们准备用C封装链表并且写一个马里奥移动的小练习