文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>类与对象(一)

类与对象(一)

时间:2010-11-16  来源:osullishuai80

一、类与对象概述
(1)在C++中的结构可以看作是用关键字struct创建的类.与C语言不同之处在于,其结构的成员不仅可以是变量,还可以是函数.
(2)C++中结构成员通常分为两种:
   1.私有成员(private):它只能被该结构中的其它成员访问.
   2.共有成员(public) :它既可以被结构中的其它成员访问,又可以被结构外的其它部分访问.
(3)类中的成员函数即使是在类中声明,类外定义,它也可以直接使用类内的私有化数据.
(4)类中成员从作用上讲,主要分为两种.一种是对象的属性,常设置为私有.另一种是对对象属性的操作,常设置为共有,且这些操作的接口函数多使用Getxxx()、Setxxx()等形式.
(5)C++源文件架构
   1.头文件  :该文件用于类的声明及函数成员的声明.
   2.xx.cpp  :该文件用于定义类的成员,包括数据成员和函数成员.
   3.main.cpp:在主函数中实例化一个对象,实现对数据成员和函数成员的调用.
   Attention!!!
   1.类的声明可以放在main.cpp内,但这样会带来一个问题,类的作用域只能是main()函数,当其它函数需要引用该类的成员时,编译器会报错.
   2.声明类时系统不会在内存中分配地址空间,只有当实例化一个对象时才会在内存中分配地址空间,且空间大小等于类空间的大小.
  二、类的定义
  在C++中,将结构保留字struct换作class,即成为类的定义.
(1)类的声明中的private和public两个关键字可以按任意顺序出现任意次.为了使程序更加清晰,将所有私有成员和公有成员归类放在一起.
(2)类的关键字除了private和public外,还有protected(保护性成员).
(3)数据成员可以是任何数据类型,但不能用auto、register、extern声明.
(4)不能在类的声明中给数据成员进行初始化.
(5)类的例程:
   class point
  {
     private:
        int x;
        int y;
     public:
        int num;
        void print(void)
       {
          cout<<x<<' '<<y<<endl;
       }
   };
 
三、类的申明
(1)类中有两种成员,即数据成员和函数成员.
(2)定义函数成员有两种方法:
方法1:在类声明中只给出成员函数的原型,这种定义格式是将函数定义为非内联函数.其具体定义在类的外部.一般格式为:        返回类型  类名::函数名(参数列表)
      {
            //函数体
      }
      例程:
      class point
     {
        private:
            int x,y;
        public:
            void setpoint(int,int);
            int getx();    
     };
      int point::getx()
     { 
        return x;
     }
     void point::setpoint(int a,int b)
    { 
        x=a;  y=b;
    }
方法2:将函数成员定义为"内联函数".即将函数定义为内联函数有两种方法,一种是隐式定义,即在类中定义,默认为内联函数;另一种是在类外定义,必须加上关键字inline.
 <1>隐式定义:直接书写在类中.
 <2>显式定义:类中给出函数成员的声明,在类外定义时,冠以inline.
    例程:
    //隐式内联
    class point
   {
      private:
         int x,y;
      public:
         void setpoint(int,int)  
         {
            x=a; 
            y=b;
         }
         int getx()   
         {
            return x;
         }
         int gety()   
         {
           return y;
         }
     };
    //显式内联
    class point
   {
      private:
         int x,y;
      public:
         void setpoint(int,int);  
         int getx();     
         int gety();     
   };
    inline void point::setpoint(int,int); 
   {
      x=a; 
      y=b;
   }
    inline int point::getx()   
  {
      return x; 
  }  
   inline int point::gety()  
  {
      return y;
  }
 
四、对象的定义及引用
(1)"类"是数据类型,"对象"是变量.
(2)当声明类的同时定义对象,则该对象是全局对象.当使用对象时再定义,则该对象是局部对象.注意,定义对象后,会为对象分配存储空间.这里,全局的对象在任何函数中均可以是偶那个,而局部对象只能在定义对象的函数中使用.
(3)无论是类中的数据成员,还是函数成员,只要是共有的,就可以被外部函数直接引用.引用的方法:
     对象名.数据成员名
     对象名.成员函数名(实参表)
  例程:
  class point
 {
    private:
       int x,y;    
    public:
       int num;
       void setpoint(int i,int j);
       int getx(){return x;}
       int gety(){return y;}
 }op1,op2;                      //定义全局对象
  void point::setpoint(int i,int j)  //类的函数成员
 {
    x = i; y = j;
 }
 void show_opint(void)             //普通函数
 {
    cout<<"show op1 & op2 in fun!"<<endl;
    cout<<"op1:"<<op1.num<<' '<<op1.getx()<<','<<op1.gety()<<endl;
    cout<<"op2:"<<op2.num<<' '<<op2.getx()<<','<<op2.gety()<<endl;
 }
 void main()
 {
    point op3,op4;      //定义局部对象
    op1.num = 1;        //成员引用
    op2.num = 2;
    op3.num = 3;
    op4.num = 4;
    op1.setpoint(10,15); //成员引用
    op2.setpoint(20,25);
    op3.setpoint(30,35);
    op4.setpoint(40,45);
    cout<<"show point in main!"<<endl;
    cout<<"op1:"<<op1.num<<' '<<op1.getx()<<','<<op1.gety()<<endl;
    cout<<"op2:"<<op2.num<<' '<<op2.getx()<<','<<op2.gety()<<endl;
    cout<<"op3:"<<op3.num<<' '<<op3.getx()<<','<<op3.gety()<<endl;
    cout<<"op4:"<<op4.num<<' '<<op4.getx()<<','<<op4.gety()<<endl;
    show_opint();     //普通函数
 }
Attention!!!
(1)op1.setpoint(1,2)等价于op1.point::setpoint(1,2).
(2)外部函数不能引用对象的私有成员.例如:
    void main()
    {
        op3.x = 5;         //错误
    }
(3)在定义对象指针时,必须使用指针运算符"->"来访问对象成员.例如:
    void main()
    {
        point a;
        point *op = &a;
        op->setpoint(1,2);   //正确
        op.setpoint(1,2);    //错误
    }
   
五、对象的赋值
(1)同一种类的对象可以相互赋值.例如:
   #include <iostream.h>
   class myclass
   {
       int a,b;
       public:
          void set(int i,int j){a=i;b=j;}
          void show(){cout<<a<<','<<b<<endl;}
   };
   void main()
  { 
       myclass p1,p2;
       p1.set(20,5);
       p2=p1;      //对象赋值(将所有的成员逐个进行拷贝)
       p1.show();
       p2.show();
  }
  执行结果:
     20,5
     20,5
(2)将一个对象的值赋给另一个对象时,多数情况下都是可以的.但当类中存在指针时要特别小心,因为赋值结束后,两个对象内的成员指针都指向同一段地址空间,若其中一个对象改变了空间内的值,则另一个对象的成员指针所指向的内容也会发生变化.
  
六、类的作用域
(1)类的作用域就是在类声明中一对花括号所形成的作用域.
(2)一个类的任何成员可以引用该类的其它成员.
(3)一个类的成员函数可以不受限制的引用该类的数据成员,而在该类的作用域之外,对该类的数据成员和成员函数的引用则要受到一定的限制,只有公有成员才可以被外部函数引用,而对私有成员是不允许被外部函数引用的,这体现了类的封装性.  
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载