首页 > 代码库 > C++访问权限的问题

C++访问权限的问题

以前一直认为对于类中的private数据成员,只有调用该方法的对象才能更能访问自身的私有成员,其他的类在该成员函数(公共接口)中也无法调用自身的私有成员,今天看到《c++ prime plus》(第六版)的382页,发现了这个问题,以前一直以为在成员函数中和在main函数中一样,都无法访问其他类或者自身类的私有成员,今天对这个误解有了新的体会,故记了下来,以免忘记。

//mytime0.h  -- Time class before operatpr overloading#ifndef MYTIME0_H_#define MYTIME0_H_class Time{private:    int hours;    int minutes;public:    Time();    Time(int h, int m = 0);    void AddMin(int m);    void AddHr(int h);    void Reset(int h = 0, int m = 0);    Time Sum(const Time & t)const;    void Show()const;};#endif
//mytime0.cpp -- implementing Time methods#include  <iostream>#include "mytime0.h"Time::Time(){    hours = minutes = 0;}Time::Time(int h, int m){    hours = h;    minutes = m;}void Time::AddMin(int m){    minutes += m;    hours +=minutes / 60;    minutes %= 60;}void Time::AddHr(int h){    hours += h;}void Time::Reset(int h, int m){    hours = h;    minutes = m;}Time Time::Sum(const Time & t)const{    Time sum;    sum.minutes = minutes + t.minutes;//可直接访问私有成员    sum.hours = hours + t.hours + sum.minutes / 60;    sum.minutes %= 60;    return sum;}void Time::Show()const{    std::cout << hours << minutes << std::endl;}
//useTime0.cpp -- using the first draft of the Time class //compile useTime0.cpp and mytime0.cpp  together#include <iostream>#include "mytime0.h"int main(){    using std::cout;    using std::endl;    Time planing;    Time coding(2,40);    Time fixing(5,55);    Time total;    total = coding.Sum(fixing);    total.Show();    //total.hours += 10;  error   无法访问私有成员    //cout << total.minutes <<endl;  error 无法访问私有成员    return 0;}

前面三段代码中,在mytime.cpp中实现的const成员函数sum()中,形参t是个const引用类类型,在sum中,t可以直接访问t对象的私有成员,而在useTime0.cpp中使用total.hours私有成员就会在编译阶段提示错误,故私有成员是在类中公有接口才可以使用(友元函数是个例外)。

C++访问权限的问题