C++之类的学习心得

    近来学习了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++的基础,特点也是非常明显的,封装性。类也是程序后期开发的基础,简单的说开发程序就像是搭积木,要一块一块的搭建,一部分一部分的增加,才能搭建出一个良好的程序。好的程序也要可以随时随地增加功能,减少功能,这也就要求类的定义详细,可读性强,我们想要写出好的程序,就要养成良好的习惯,从现在开始养成良好的编程习惯也是非常重要的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值