在c语言中,“数据”和“处理数据的函数“是分开声明的,也就是说c语言本身不支持”数据和函数“之间的关联性。也就是说数据处理方法和数据是分离的,举个例子 我们要打印一个学生的成绩
但是在C++中,student有可能采用独立的“抽象数据模型”
抽象的类 将数据和处理方式联系在了一起,更加有利于对数据的管理,既然C++这么好,那么我们一起来学习吧。
观察上图 我们看到了
那么限定符有什么用呢,还有没有别的限定符呢
【访问限定符说明】
类的三大特性 封装 继承 多态 在类和对象初级阶段 主要学习封装。大家注意到有一个private的限定符 ,这样外面就访问不到类里面的数据。只能通过给出的接口进行。这样做一切就有了规章制度,一切都在规定下进行。
在内外定义的类的成员变量需要说明 举个例子
我们还是看一个学生类:
如果我们对他进行如下操作:
int main()
{
student s1, s2;
s1.ADD(65, 54);
s2.ADD(87, 88);
return 0;
}
那么问题就来了 ,调用的是一个函数吗,如果是同意个函数怎么区分的呢?
先回答第一个问题,他是一个同一个函数,那么他是怎么区分的呢?
这里就要说到这个this指针
C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参
数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该
指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。
接下来我们尝试打印this指针
注意事项 this的空指针问题
构造函数的特点:
默认构造函数的三种类型:
默认构造函数只能是上述三种,否则则会缺乏默认构造函数。默认构造函数只能有一个。
上面是对象初始化的构造函数,下面是对象销毁的析构函数。析构函数有以下特点
拷贝构造函数是构造函数的一种,也是系统自动调用。拷贝构造有深浅拷贝,编译器默认生成的是浅拷贝。
浅拷贝下图为例:
当你拷贝的类里面有开辟空间时就需要深拷贝。深拷贝是可以给拷贝的类开辟新的空间的拷贝。
注意:如果对栈等需要开辟空间的类,如果使用浅拷贝,则导致在析构函数中一块内存释放两次。
C++为了增加函数可读性,引入了运算符重载.运算符重载在一定程度上简化了代码。
使用运算符 必须注意: 不要改变原符号的意思!!!
2. 这五个不可以重载: . :: sizeof ?: .* 注意以上5个运算符不能重载。
重载的格式为: 返回类型 operator (符号) ()
例如某个日期的另一天,在这里我们不具体写出函数体。后面我们会整体实现函数类,以语法复习介绍为主。
this指针是内部函数的第一个参数,重载在内部函数也是如此。
重载函数可以显示调用,也可重载调用。
前置++和后置++的问题
在c++中通过在传参中加入int表明为后置++
=的重载: =实际可以看做构造函数使用。内置类型的成员直接拷贝。开辟空间的成员变量重新分配空间。
const是权限的缩小。const成员只能调用const成员函数
const修饰的是this指针。
注意const指针: 不能扩大权限,可以缩小权限。