| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1793 人关注过本帖
标题:友元函数却不能访问私有成员,是怎么回事?
取消只看楼主 加入收藏
zzt_428
Rank: 2
来 自:南京师范大学
等 级:论坛游民
威 望:2
帖 子:243
专家分:22
注 册:2008-7-6
收藏
 问题点数:0 回复次数:3 
友元函数却不能访问私有成员,是怎么回事?
#ifndef VECTOR_H_
#define VECTOR_H_
#include <iostream>
using namespace std;

class Vector
{
private:
    double x;
    double y;
    double mag;
    double ang;
    char mode;
    //private methods
    void set_mag();
    void set_ang();
    void set_x();
    void set_y();

public:
    Vector();
    Vector(double n1, double n2, char form='r');
    void set(double n1, double n2, char form='r');
    ~Vector();
    double xval() const { return x; }
    double yval() const { return y; }
    double magval() const { return mag; }
    double angval() const { return ang; }
    void polar_mode();
    void rect_mode();
    //operator overloading
    Vector operator+(const Vector &v) const;
    Vector operator-(const Vector &v) const;
    Vector operator-() const;
    Vector operator*(double n) const;
    //friends
    friend Vector operator*(double n, const Vector &v);
    friend ostream & operator<<(ostream &os, const Vector &v);
};//end class Vector
#endif

//部分函数定义省略
//.........
ostream & operator<<(ostream &os, const Vector &v)
{
    if(v.mode == 'r')
        os << "(x,y)=(" << v.x << "," << v.y << ")";
    else if(v.mode == 'p')
        os << "(m,a)=(" << v.mag << "," << v.ang*Rad_to_deg << ")";
    else
        os << "Vector object mode is invalid.";

    return os;
}

这里编译器报错,说不能访问私有成员是怎么回事?明明定义为友元的...
搜索更多相关主题的帖子: 函数 成员 访问 
2008-12-10 09:52
zzt_428
Rank: 2
来 自:南京师范大学
等 级:论坛游民
威 望:2
帖 子:243
专家分:22
注 册:2008-7-6
收藏
得分:0 
谢谢楼上两位,我用VC6.0,不是标准的C++

学习切忌浮躁.
2008-12-10 19:44
zzt_428
Rank: 2
来 自:南京师范大学
等 级:论坛游民
威 望:2
帖 子:243
专家分:22
注 册:2008-7-6
收藏
得分:0 
回楼上的,那不是将输出流作为友元,而是将操作符号<<重载了

学习切忌浮躁.
2008-12-11 11:25
zzt_428
Rank: 2
来 自:南京师范大学
等 级:论坛游民
威 望:2
帖 子:243
专家分:22
注 册:2008-7-6
收藏
得分:0 
返回一个Ostream 类型的对象的引用

学习切忌浮躁.
2008-12-11 11:26
快速回复:友元函数却不能访问私有成员,是怎么回事?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012242 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved