首页 > 代码库 > 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++访问权限的问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。