struct 将所有的成员都默认为public权限,这很不安全。此外,C++中的struct还容易与传统C语言中的结构混淆。基于此,C++引入了功能与struct相同,但却更安全的数据类型--类。

     类也是一种自定义的数据类型,用关键字class表示,用法同struct,形式如下:

 1 class class_name{
 2 [private:]
 3     data_member ;
 4     function_name ;
 5 public:
 6     data_member ;
 7     function_name ;
 8 protected:
 9     data_member ;
10     function_name ;
11 };

其中class_name是类名,private,public,protected用于指定成员的访问权限,data_member表示数据成员,function_name表示成员函数;一对{}表示类的范围,右括号}后面的;必不可少,表示类声明的结束。

例程1(用class定义的复数类Complex):

 1 #include<iostream>
 2 using namespace std;
 3 class Complex{
 4 private:
 5     double r;
 6     double i;
 7 public:
 8     void init(double rr,double ii){r=rr;i=ii;}
 9     double real(){return r;}
10     double image(){return i;}
11 };
12 void main()
13 {
14     Complex a;
15     a.init(2,3);
16     cout<<a.real()<<"+"<<a.image()<<"i"<<endl;
17     a.r=6;                          //错误,访问类的私有成员
18     a.i=3.2;                        //错误,访问类的私有成员   
19 }

说明:

        ①类声明中的访问限定符private,public,protected没有先后次序之分,哪个在前哪个在后没有区别。

        ②在一个类中,访问限定符private,public,protected的出现次数没有限制。比如上面的Complex也可以定义如下:

 1 class Complex{
 2 public:
 3     void init(double rr,double ii){r=rr;i=ii;}
 4 private:
 5     double r;
 6     double i;
 7 public:
 8     double real(){return r;}
 9     double image(){return i;}
10 };

这个定义与前面的定义等价,但将具有相同访问属性的成员放在一起更加清晰。

       ③数据成员和成员函数都可以设置为public,private或protected属性。出于信息隐藏的目的,常将数据成员设置成private权限,将需要类外部函数访问的成员函数设置为public权限,只能让类内部访问的成员函数设置为private权限。

       ④数据成员可以是任意类型,如整型,浮点型,字符型,指针,引用等。也可以是另一个类的对象或指向对象的指针,还可以是指向自身类的指针或引用,但不能是自身类的对象。此外,数据成员不能指定为自动(auto),寄存器(register)和外部(extern)存储类型。例如:

 1 class A{......}
 2 class B{
 3 private:
 4     int a;
 5     A obja1;
 6     A *obja2;
 7     B *objb,&objr;
 8     B b1;             //错误
 9     auto int b;       //错误
10     extern int c;     //错误
11 public:
12     ......
13 };

       ⑤在声明(或定义)类时,不能为数据成员赋初值。例如:

1 class A{
2 private:
3     int a=0;          //错误
4     int b[3]={1,2,3}; //错误
5 public:
6     ......
7 };

      ⑥struct和class的唯一区别是,在没有指定成员函数的访问权限时,struct中的成员具有public的权限,class中的成员具有private权限。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2012-11-23 13:26  Acmer_Roney  阅读(188)  评论(0编辑  收藏  举报

导航