近来学习了C++最有特点的部分——类。
类相比于C语言的结构体来说,优点就是类具有权限的分别,公有,私有,保护。
公有:一般行为函数权限为公有,可在类外被调用。
私有:无法在类外访问,一般存放数据成员。
保护:继承中有应用。
类的特点:封装性、继承性、多态性。
类的优点:更好更高效的组织数据。
我们定义类一般分为两种:数据类、操作类。
数据类:描述信息的类(数据),一般包含get函数、set函数、构造函数、display函数。
操作类:描述操作的类(操作),一般在管理系统中实现增、删、查、改的功能。
一般定义格式
class A
{
public:
protected:
private: //默认类成员访问权限私有
//数据成员在定义中不初始化
}; //一定要加分号,我也是经常忘....
返回值 类名::成员函数(参数表){}; //成员函数定义,类名限定,成员不能是自身(不能递归调用)
int main()
{
类名 对象名;
对象名.公有成员; //圆点调用
对象指针->公有成员; //指针调用
}
内联函数
inline 函数名(); //这样的函数调用快,适用于小函数常用的,实际上这样函数常驻内存,已经用的比较少了
构造函数
创建对象时,系统自动调用的函数。
特点:无返回值类型,与类名相同,可重载。
class Date //一般规则,类名大写
{
public:
Date();
};
构造函数初始化列表
Date(int dd,int mm,int yy):d(dd),m(mm),y(yy){}; //顺序与私有成员的定义顺序一致
一般必须使用的情况:
1.数据成员为常量 const
2.数据成员为引用类型 &
3.数据成员是没有无参构造函数的类的对象
构造函数的重载
class Box;
{
public:
Box();
Box(int,int,int);
private:
int height,length,width;
};
Box::Box()
{height=10;width=10;length=10;}
Box::Box(int h,int w,int l):height(h),width(w),length(l){}; //注意重载的时候可能会出现二义性
复制构造函数
用已有对象创建新对象。
类名::类名(const 类名 & 引用名);
一般调用
class Box
{};
int main()
{Box box1(1,2,3),box2(box1),box3=box2;}
说到复制构造函数,就有深复制和浅复制的问题了
浅复制:对于简单类型比较好用,当P2对象复制P1对象的时候,P1删除,P1中的指针指向的地址内容删除,P2中的指针复制的
地址与P1相同,所以P2指向的地址变为空。(其实就是P1、P2中的指针指向了同一个空间)
深复制:对于复杂变量比较好用,一般用new申请空间,复制时将资源一并复制 。
this指针
为自动分配的指针,指向对象。
使用情况:
1.变量与参数同名(起不出名了.....)
2.返回对象本身
3.避免对同一对象操作
比如说学生信息管理系统
setName(string name){this->name=name;}
同名变量,生存空间小的变量,优先
析构函数
对象生存结束时,释放成员所占空间,自动调用。
特点:无返回值,无参数,不能重载,自动调用。
~类名()
{
} //一般析构函数中delet释放动态申请的空间,清理内存空间。
其他类型成员
常成员
只读不写
const 关键字
const int a; //常数据成员只能用初始化列表初始化
void Print() const; //常成员函数只能读,不能写。
静态成员
分配空间后始终存在
好处:省空间,操作统一
static 关键字
class Counter
{ static int num;
public:
void setNum(int i){num+=i;}
void shonNum(){cout<<num;}
};int Counter::num=0; //静态成员初始化办法.
友元函数
一般用于运算符重载,破坏了类的封装性,不建议使用。
程序开发步骤(括号内为个人解读)
1.功能(程序要干嘛)
2.分类汇总(增删查改)
3.设计类(想想操作类有啥功能)
4.设计数据类(根据功能想想要有啥数据)
5.整合
6.调试(非常重要)
一般来说调试先调试数据类,数据类为基础
数据类调好后 ,再调试操作类,操作类中先调试最需要的功能,然后再陆续增加功能,测试的时候多用几组样例,一定要每个函数都调。
一般采取滚雪球式调法,写一个,调一个,从基础调起,雪球越滚越大。
总结
类是C++程序最具特色的部分,也是C++程序与C的重要区别,还是C++的基础,特点也是非常明显的,封装性。类也是程序后期开发的基础,简单的说开发程序就像是搭积木,要一块一块的搭建,一部分一部分的增加,才能搭建出一个良好的程序。好的程序也要可以随时随地增加功能,减少功能,这也就要求类的定义详细,可读性强,我们想要写出好的程序,就要养成良好的习惯,从现在开始养成良好的编程习惯也是非常重要的。