标签:style blog color io os 使用 for sp 数据
以前一直认为对于类中的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私有成员就会在编译阶段提示错误,故私有成员是在类中公有接口才可以使用(友元函数是个例外)。
标签:style blog color io os 使用 for sp 数据
原文地址:http://www.cnblogs.com/Beann/p/4036688.html