C++_类和对象 (3)

在类的内部所有成员之间都可以通过成员函数直接访问,但是类的外部不能访问对象的私有成员

例2.3 一个存在错误的程序 #include <iostream.h> class Date { public: void setDate(int y,int m,int d); void showDate(); private: int year; int month; int day; }; void Date∷setDate(int y,int m,int d) { year=y; month=m; day=d; } inline void Date∷showDate() { cout<<year<<"."<<month<<"."<<day<<endl; } void main() { Date date1,date2; cout<<"Date1 set and output:"<<endl; date1.setDate(1998,4,28); cout<<date1.year<<"."<<date1.month<<"."<<date1.day<<endl; //错误 date1.showDate(); cout<<"Date2 set and output: "<<endl; date2.setDate(2002,11,14); cout<<date2.year<<"."<<date2.month<<"."<<date2.day<<endl; //错误 date2.showDate();• }

在定义对象时,若定义的是指向对象的指针,则访问此对象的成员时,要用“->”操作符。

void main( ) { Date *date3; date3->setDate(2001,8,15); //…… } 3.3 类成员的访问属性

类成员有三种访问属性:公有(public)私有(private)保护(protected)

说明为公有的成员不但可以被类中成员函数访问;
还可在类的外部,通过类的对象进行访问。

说明为私有的成员只能被类中成员函数访问,不能
在类的外部,通过类的对象进行访问。

说明为保护的成员除了类本身的成员函数可以访
问外,该类的派生类的成员也可以访问,但不能在类的
外部,通过类的对象进行访问。类成员的访问属性

类的成员对类对象的可见性和对类的成员函数的可见性是不同的。

类的成员函数可以访问类的所有成员,而类的对象对类的成员的访问是受类成员的访问属性的制约的。

3.4 类中成员的访问方式

类中成员互访:直接使用成员名

类外访问:使用“对象名.成员名”方式访问 public 属性的成员

class Sample{ public: int k; int geti(){return i;} int getj(){return j;}int getk(){return k;} private: int i; protected: int j; }; //…… Sample a; //定义类Sample的对象a a.i; //非法,类Sample的对象a不能访问类的私有成员i a.j; //非法,类Sample的对象a不能访问类的保护成员j a.k; //合法,类Sample的对象a能访问类的公有成员k //……

一般来说,公有成员是类的对外接口,而私有成员和保护成员是类的内部数据和内部实现,不希望外界访问。

将类的成员划分为不同的访问级别有两个好处:一是信息隐蔽,即实现封装;二是数据保护,即将类的重要信息保护起来,以免其它程序不恰当地修改。

3.5 对象赋值语句

两个同类型的变量之间可以相互赋值。同类型的对象间也可以进行赋值,当一个对象赋值给另一个对象时,所有的数据成员都会逐位拷贝

例2.5 #include<iostream.h> class abc{ public: void init(int i,int j) { a=i; b=j; } void show(){ cout<<a<<" "<<b<<endl; } private: int a,b; }; main() { abc o1,o2; o1.init(12,34); o2=o1; // 将对象o1数据成员的值赋给对象o2 o1.show(); o2.show(); return 0; } 说明:

在使用对象赋值语句进行对象赋值时,两个对象的类型必须相同,如果对象的类型不同,编译时将出错。

两个对象之间的赋值,仅仅使这些对象中数据成员相同,而两个对象仍是分离的。

例2.5的对象赋值是通过缺省的赋值运算符函数实现的。

当类中存在指针时,使用缺省的赋值运算符进行对象赋值,可能会产生错误

3.6 类的作用域

所谓类的作用域就是指在类声明中的一对花括号所形成的作用域。

一个类的所有成员都在该类的作用域内,一个类的任何成员可以访问该类的其他成员

一个类的成员函数可以不受限制地访问类的成员,而在类的外部,对该类的数据成员和成员函数的访问则要受到一定的限制,有时甚至是不允许的,这体现了类的封装功能。

例2.6 理解类的作用域 # include<iostream.h> class myclass{ public: int i; void init(int); void show(){ cout<<“i=” <<i<<endl;} // 可以访问类中的数据成员i }; void myclass::init(int si){ i=si;} // 可以访问类中的数据成员i int fun(){ return i; } // 非法,不能直接访问类中的i void main() { myclass ob; ob.init(5); // 给数据成员i赋初值5 ob.show(); i=8; // 非法,不能直接访问类中的i,可改写成ob.i=8 ob.show(); }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzfjf.html