类
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) 编辑 收藏 举报