【C++学习笔记】类(一)

这一次更新是出于复习目的的更新,算是回顾一下类的知识点吧

类是什么

如果把编程看作是另一个世界的话,那么程序员就像是这个世界里的上帝,或者说的本土化一点,我们就是这个自己定义出的世界里的“女娲”。我们用泥巴捏出一个个生物(定义类、构造类的实例),并时不时补补天(改bug),在C++的世界里,类就是我们要捏的那个“小泥人”。

假如我们是女娲,我们在捏一个生物的过程中总是要思考以下问题:
我的人长什么样?
他能做什么?
这个生物叫什么?
而架构这些概念的过程就是类的定义。

类(class)是面向对象程序设计的最基本的概念,是C++最强有力的特征,是进行封装和数据隐藏的工具,它将一个数据结构与一个操作集紧密地结合起来。类对象是类的实例,用类对象模拟现实世界中的事物比用数据对象更确切。

这就是类,是C++比起C来说最大的特点,如果说写C语言是在写小说,剧情人物都是设定好的,生动流畅;那么写C++就像是写剧本,定义好我要的角色和角色对应的台词,让人一目了然。

类和struct之间的联系与对比

  • 类是C++对C中struct结构的扩展,所以C++只是在struct的基础上再进行了进一步提升,将struct改造成了我们现有的概念“类”。
  • C语言中struct是数据成员的集合,而C++中的类,则是数据成员和成员函数的集合。(深度理解:注意这只是定义上的差别。在实际中,你会发现其实在C++中struct也可以在内部定义函数,只是在struct中定义出来的函数无法实现数据的保护。实质上,C++能定义函数恰恰是因为struct中能定义函数,只是有了类之后struct在定义上只用做一个数据成员的集合就好了,其他事情由类完成就好了。
  • 结构无法对数据进行保护和权限控制,所以结构中的数据是不安全的。C++中类和数据可以通过权限的控制自己形成一个闭环的生态,这样就能形成一个整体,并且呈现出良好的封装性。
    总结:struct和类之间不是独立的关系,而是体现了C++对C的一个继承改造的关系,类让struct的功能变得更好用,并形成了一个个独特的类生态。

类的声明:
类的成员分为两部分:一部分对应数据的状态,称为数据成员,另一部分作用于数据状态的函数,称为成员函数

class  类名 {
public:
  公有数据成员;
  公有成员函数;
protected:
  保护数据成员;
  保护成员函数;
private:
  私有数据成员;
  私有成员函数;
 };

这里就体现出类不同于struct的地方了——出现了不同的数据安全级别。
public:称为公有部分,安全级别最低,其对外是可以直接开放的,跟struct结构中的数据没有区别。

private部分称为私有部分,安全级别最高。这一部分内部的成员外部是不能被外界访问的,**无论什么情况都只能被自己类的成员访问。**外界除非使用该类公有成员中的成员函数对私有成员进行访问,否则任何方式都是非法的。

protected称为类的保护部分,该部分成员可以由本类的成员函数访问,也可以由类的派生类的成员函数访问,而类外的任何访问都是非法的。(就是相比private类多加了一个可让派生类访问的权限。)

注意点:

1.类声明中三种格式不一定都要有,可以缺省,其定义顺序也没有要求。
2.如果没有说明定义的格式,编译器自动把该成员做private处理。
3.类内数据成员的数据类型,可以任意声明,但不能是auto、extern、register
4.不能在类声明中给数据成员赋值。

一个例子:

class Date{	  //定义类名一般首字母大写。
public:
	void SetDate(int y ,int m, int d);
	void showDate();
	private:
	int m_year;
	int m_month;
	int m_day;
	};           //和结构一样,最后这个分号一定要加上,这是规范。

成员函数的声明

成员函数的声明采用下面的两种方式:
1.像普通函数一样声明,即在类内进行声明,后面直接跟上函数体。
2.类外声明
类外定义的一般形式为:
返回类型 类名::成员函数名(参数表){
//函数体
}

class  Coord {
    public:
        void setCoord (int,int); // 设置坐标点
        int  getx();             // 取x坐标点
        int  gety()	{return y;};             // 取y坐标点
    private:
        int x,y;
    };
   
   void Coord∷setCoord(int a,int b){ x=a; y=b;}  
   int Coord::getx(){  return  x;}              
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值