一、C++中的类
C++中的类,将数据和操纵数据的方法组合成一个整洁的包。
类规范包括两个部分组成:
类声明:以数据成员方式描述数据部分,以成员函数(方法)的方式描述公有接口。
类方法定义:描述如何实现类成员函数
通常,程序员将接口(类定义)放在头文件中,并将实现放在源代码中。
内联函数
定义位于类声明中的函数都将自动成为内联函数、
也可以在类声明之外定义成员函数,并使之成为内联函数。
为此,只需在类实现部分中定义函数时使用inline限定符即可。
#include<iostram> using namespace std; class Stock { private: void set_tot(); } iniline void Stock::set_tot() { }
内存分配
每个对象都有自己的存储空间,用于存储其内部的变量和类成员;
但同一个类的所有对象共享同一类方法,即类方法只有一个副本。
构造函数
每次创建类对象(甚至使用new动态分贝内存)时,C++都使用类构造函数。
如:Stock *pstock=new Stock("Furry",20);
这条语句创建一个Stock类对象,将其初始化为参数提供的值,并将该对象地址赋值给pstock指针
这种情况下,对象没有名称,但可以用指针来管理对象。
析构函数
用构造函数创建对象后,程序负责跟踪该对象,直到其过期为止。
对象过期时,程序将自动调用析构函数。
何时释放析构函数?
如果创建的是静态存储对象,其析构函数将在程序结束时被自动调用
如果创建的是自动存储类对象,则其析构函数将在程序执行完代码块时自动被调用。
如果对象是通过New创建的,则他将驻留在栈内存或自用存储区中,直到使用delete释放
this指针
每个成员函数(包括构造和析构)都有一个this指针。this指针指向调用对象。
如果方法要引用整个调用对象,可以使用表达式*this。
在函数的括号后面使用const限定符将this限定为const,这样将不能使用this来修改对象的值。
对象数组
对象数组的声明方法与标准类型的声明方法相同。
Stock mystff[4];
当程序创建未被显式初始化的类对象时,总是调用默认构造函数。
可以用构造函数来初始化数组,在这种情况下,必须为每个元素调用构造函数。
如果类包含多个构造函数,则可以对不同的元素使用不同的构造函数。
初始化对象数组的方案是:
首先使用默认构造函数创建数组元素,然后花括号中的构造函数将创建临时对象,
然后将临时对象的内容复制到相应的元素中。
因此,要创建类对象数组,则这个类必须有默认构造函数。
类作用域
在类中定义的名称(数据成员名和类成员函数名)的作用域都为整个类,只在该类中是已知,类外不可知。
抽象数据类型
运算符重载限制
1.重载后的运算符必须至少有一个操作数是用户定义的类型,防止用户为标准类型重载运算符。
2.使用运算符时不能违反运算符原来的句法规则。
3.不能创建新运算符。
4.不能重载下面的运算符
(sizeof),( . ),(.*),(?:),(typeid),(const_cast),(dyanmic_csast),(reinterpret_cast),(staci_cast)
5.大多数运算符都可以通过成员或非成员函数进行重载,但下面的运算符只能通过成员函数进行重载。
=:赋值运算符
():函数调用元素安抚
[]:下标运算符
->:通过指针访问类成员的运算符