码迷,mamicode.com
首页 > 编程语言 > 详细

C++访问权限的问题

时间:2014-10-20 11:22:05      阅读:163      评论:0      收藏:0      [点我收藏+]

标签: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私有成员就会在编译阶段提示错误,故私有成员是在类中公有接口才可以使用(友元函数是个例外)。

C++访问权限的问题

标签:style   blog   color   io   os   使用   for   sp   数据   

原文地址:http://www.cnblogs.com/Beann/p/4036688.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!