C++知识文档三_类的定义和使用

类的定义和使用

客观世界中的一切事物都可以视为对象。当然这些事物既有具体的物理实体(如:电视,电脑,洗衣机等),也可以是逻辑实体(如:部门、气候等)。不管是哪一种对象他们都有两方面的特征:静态特征和动态特征。所谓对象的静态特征就是能描述对象的一些属性。如一个部门的人数、经理名字等。所谓动态特征就是对象表现出来的行为。比如部门例会,财务汇报和人员出差等。当把一些具有共性的对象归类后形成一个集合(抽象:对事物共性的归纳和集中),也就是所谓的类。所以我们可以这样来描述类和对象之间的关系:类是对象的抽象,对象是累的实例。

类定义的一般形式为:

class类名

{

private:

   //私有成员数据和私有成员函数(方法)

protected:

   //保护成员数据和保护成员函数(方法)

public:

   //公有成员数据和保护成员函数(方法)

};

例1.演示成员访问限定符修饰成员时,成员访问属性的区别

#include<iostream>

usingnamespace std;

classCtest

{

private:

   int m_iCount;

protected:

   bool m_bFlag;

public:

   void PublicFun()

   {

      cout<<m_iCount<<endl;

   }

};

intmain()

{

   Ctest test;

   //test.m_iCount; //私有成员只能在本类内部访问

   //test.m_bFlag;     //保护成员只能在本类内部和该类的派生类中访问

   test.PublicFun();   //共有成员可以在类的外部访问,也可以在类的内部访问

   return 0;

}

例2. 定义一个虫子类,然后实例化一条小虫子,演示使用不同的成员运算符访问对象成员

classCWorm

{

protected:

   int m_x,m_y;     //保护成员变量, 存储当前屏幕坐标

   HBITMAP m_hBmp;     //保护成员变量,存储虫子的图片

   int m_iDistance; //保护成员变量,保存虫子跑过的距离

   void CumDistance(); //保护成员函数,累加虫子跑过的距离

public:

   CWorm();   //构造函数,在实例化小虫子时调用

   CWorm(int x,int y); //构造函数,在实例化小虫子时调用

   void Draw(CDC *pDC);  //调用m_hBmp成员变量,把自己画出来

   void Move(int x, int y);//请虫子爬行

   ~CWorm();     //析构函数,在虫子牺牲时调用

};

intmain()

{

   //使用'.'成员运算符访问对象的成员

   CWorm worm(20,30);    //设置好小虫子的初始屏幕坐标,并在构造函数里Load自己的图片

   worm.Draw(&dc);       //在屏幕上把自己画出来

   worm.Move(100,100);   //移动小虫子到100,100

   worm.Draw(&dc);       //在当前坐标再一次画小虫子

   //当将一个指针指向对象后,就需要使用'->'运算符访问对象的成员

   CWorm *pWorm=new CWorm(20,30);

   pWorm->Draw(&dc);

   pWorm->Move(100,100);

   pWorm->Dram(&dc);

   delete []pWorm;       //杀死小虫子

   return 0;

}

类的成员函数可以访问该类的任何成员(自己访问自己的成员,包括成员函数和成员变量)。

例3. 演示类的成员函数访问同类的成员

#include<iostream>

usingnamespace std;

classCTest2

{

private:

   void PrivateFunc()

   {

      cout<<"Call Privatefunction"<<endl;

   } 

public:

   void PublicFunc(void *pvObj)

   {

      CTest2 *pTest=(CTest2 *)pvObj;

      pTest->PrivateFunc();

   }

};

voidmain()

{

   CTest2 test1,test2;

   test1.PublicFunc(&test2);

}

成员函数的定义既可以在类声明内,也可以分开定义,通常将类声明放在.h文件,类函数定义放在对应的.cpp文件中。

内联的方式:记住如果采用这种在类的内部定义成员函数的函数体的方式,在没有加上inline的时候,这些成员函数自动为内联函数。

classCWorm

{

   //...

   inline void Move(int x, int y)

   {

      //.....

      CumDistance(x,y);

   }

   //...

};

分离的方式:在类的外部来定义成员函数的函数体,需要用域运算符::指明该函数属于哪个类,跟普通函数区别开来。

voidCWorm::Move(int x, int y)

{

   //......

   CumDistance(x,y);

}

注意:一般情况下我们提倡在头文件.h中进行类的声明,在对应的实现文件.cpp中进行类的定义(主要是成员函数的定义)。因为这样可以提高编译效率。举例来说,如果一个工程中有100个地方应用到一个类,需要包括该头文件100次。如果类的声明和定义不分开的话,该文件需要编译100次,如果分开的话只需要编译一次,生成对应的.obj文件即可。如此大大提高编译效率,对象的成员数据和成员函数的存储。对象的成员数据分开存放,但是同一个类的所有对象共享成员函数代码区。成员函数通过this指针区别不同对象的成员数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值