类的访问控制
数据封装的目的就是信息的隐蔽。为了达到信息的隐蔽,在C++类中,并非所有成员都是对外可见的(或者说是类外可访问的)。
通过设置成员的访问控制属性来实现对类成员的访问控制。
这些控制属性有:public、protected、private
class ClassName{
public:公有成员;
protected:保护成员;
private:隐私成员;
};
所有函数都可以访问公有成员,只有本类内的函数才可以访问保护成员和隐私成员,这两种暂时不做区分(学完继承与派生再做区分。。。学习中)
类的实现
定义类
class Clock{
private:
int Hour,Minute,Sencond;
public:
void SetTime(int h,int m,int s);//给出函数原型
void ShowTime();//给出函数原型
};
类实现的两种方式
//类内实现,自动按内联函数处理
class Clock{
private:
int Hour,Minute,Sencond;
public:
void SetTime(int h,int m,int s){
Hour=h;Minute=m;Second=s;
}
void ShowTime(){
cout<<"Current Time";
cout<<Hour<<":"<<Minute<<":"<<Second<<endl;
}
};
//类外实现
class Clock{
private:
int Hour,Minute,Sencond;
public:
void SetTime(int h,int m,int s);//给出函数原型
void ShowTime();//给出函数原型
};
void Clock::SetTime(int h,int m,int s){
Hour=h;Minute=m;Second=s;
}
void Clock::ShowTime(){
cout<<"Current Time";
cout<<Hour<<":"<<Minute<<":"<<Second<<endl;
}
类的使用
定义对象的方式:类名 对象名
Clock aclock;
访问类成员的方法
- 通过对象来访问成员
对象名.公有成员函数名(实参列表)
对象名.公有数据成员 - 通过对象指针来访问成员
对象的指针->公有成员函数名(实参列表)
对象的指针->公有数据成员
void main()
{
Clock clock_1,clock_2;
clock_1.SetTime(9,5,25);
clock_2.SetTime(15,16,45);
clock_1.ShowTime();
clock_2.ShowTime();
}//这里类似struct成员的访问
C++中与类相关引用
对象指针
Clock clock,*p;
p=&clock;
p->SetTime(9,5,25); //clock.SetTime(9,5,25);
p->ShowTime(); //clock.ShowTime();
通过指针访问类中的公共成员
this指针
- C++为每个非静态成员函数提供一个this指针
- this指针是一个隐含指针,它指向正在被成员函数操作的那个对象
对象引用
对象引用就是对某类对象定义一个引用,其实质是通过将被引用对象的地址赋给引用对象,使二者指向同一内存空间,这样引用对象就成为了被引用对象的“别名”。
对象引用的定义方法与基本数据类型引用的定义类似。
定义:类名 &对象引用名=被引用对象
使用:对象引用名.数据成员名
或:对象引用名.成员函数名(参数表)
例:
Clcok clock_1(8,20,20);
Clock &clock_2=clock_1;//定义了&clock_1的对象引用&clock_2
clock_2.ShowTime();//通过对象引用使用对象的成员
clock_2和clock_1使用同一个内存空间,clock_2也称为引用对象
总结:定义和使用类类型的过程
- 抽象:对事物进行抽象
- 声明类:根据抽象的结果定义类的特性
- 实现类:实现类中成员函数的逻辑
- 使用类:在程序中定义类的实例,使用类的公有成员