c语言与c++封装的区别:
- 类即是对象的抽象,对象也就是类的实例化。
属性和行为:
- 在c++中的区别就是,行为是函数,属性是通过类来定义的对象的类别。(人的属性是人类,狗的属性是动物) 在c语言中使用struct结构体封装一个类,但是只能封装一些变量,不能对函数(这里我们把函数称为行为)进行封装,函数在结构体外部进行定义与声明,也就是说将结构体外的任何一个对象都可以访问不同对象所定义的函数,也就是行为。这样很容易搞乱。(举个例子,有一个结构体内部定义了name,然后定义了两个对象一个是狗一个是人,在外部函数里面,执行的行为是狗吃屎,人吃饭,按道理说人不应该执行狗的行为,但是现在行为定义在外部,所以人就可以执行狗的行为,显然这个是不合理的)
在c++中封装特性,不但可以封装变量,还可以封装函数(行为),也就是说不同的对象有着不同的行为,也就是说,人这个类,无法去访问狗这个类中的行为 。使得属性和行为绑定在了一起,在c的基础上c++这样显得 更加合理和严谨。
关于构造函数和析构函数:
-
构造函数和析构函数都没有返回值,也没有void,但是构造函数 可以重载也就是意味着有参数,而析构函数没有参数。
-
构造函数和析构函数,只要创建一个类的对象,然后系统就会自动调用一次构造函数,然后当代码运行完之后再调用析构函数,要是我们不给出构造和析构函数系统就会调用默认的构造函数和析构函数(空的函数没啥作用)。
-
构造函数是刚开始就调用,而析构要等到类对象作用域结束才会调用,所以一定要考虑生命周期的问题。
调用拷贝构造构造函数的两种方法:
1.括号法调用,类名 + 对象 +(参数)= 有参构造函数
类名 + 对象 = 默认构造函数
类名 + 对象 + (同类对象) = 拷贝构造函数(拷贝构造函数是 为了复制原始对象的变量信息,所以一般在函数参数前加上const)
构造函数的调用规则:
- 首先系统提供的默认函数有三个:1.默认构造函数 2.拷贝构造函数 3.析构函数
- 当我们自己提供了有参构造函数(非拷贝构造函数),而并没有提供默认构造函数,那么系统也就不会提供他自己的默认构造函数,但是会提供默认拷贝构造函数。当我们只提供了拷贝构造函数,那么系统也不会调用其他默认构造函数