求助 声明友元函数 依然无法访问private数据

qq_30499345 qq_30499345 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
Coordinate.h
#ifndef COORDINATE_H
#define COORDINATE_H
class Coordinate
{
friend ostream & operator<<(ostream& out, Coordinate & coor);
friend Coordinate operator+(const Coordinate &c1, const Coordinate &c2);
private:
int m_iX;
int m_iY;
public:
Coordinate(int x, int y);
int getX();
int getY();

/*Coordinate operator+(const Coordinate &c);*/
};
#endif

Coordinate.cpp
#include "Coordiante.h"
#include<iostream>
#include<ostream>
using namespace std;


Coordinate::Coordinate(int x, int y)
{
m_iX = x;
m_iY = y;
}

int Coordinate::getX()
{
return m_iX;
}

int Coordinate::getY()
{
return m_iY;
}

//Coordinate Coordinate::operator+(const Coordinate & c)
//{
// Coordinate temp(0,0);
// temp.m_iX = this->m_iX + c.m_iX;
// temp.m_iY = this->m_iY + c.m_iY;
// return temp;
//}

ostream & operator<<(ostream & out, Coordinate & coor)
{
out << coor.m_iX << ":" << coor.m_iY ;
return out;
}

Coordinate operator+(const Coordinate & c1, const Coordinate & c2)
{
Coordinate temp(0,0);
temp.m_iX = c1.m_iX + c2.m_iX;
temp.m_iY = c1.m_iY + c2.m_iY;
return temp;
}

demo.cpp
#include"Coordiante.h"
#include<iostream>
using namespace std;

int main()
{
Coordinate c1(1, 3);
Coordinate c2(2, 3);
Coordinate c3(0, 0);
c3 = c1 + c2;
cout << c3<<endl;
system("pause");
}

IDE环境是VS2016 问题在于定义输出符号的重载的时候,VS提示无法访问m_iX 和m_iY
...全文

相关推荐

友元函数详细讲解

友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)。

wangbin_147

C++友元函数及友元类全总结

本文档详细介绍了C++友元函数及友元类,方便大家对比学习

灬風無痕灬

友元函数和友元类_友元函数用法_

私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行。这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦。

kikikuka

VC6.0中重载操作符友元函数无法访问类的私有成员的解决办法.docx

。

G11176593

解析C++中不能重载为友元函数的四个运算符

C++规定有四个运算符 =, ->, [], ()不可以是全局域中的重载(即不能重载为友员函数),这是为什么呢?现在先说说赋值运算符“=”的重载C++规定赋值运算符“=”只能重载为类的非静态成员函数,而不可以重载为类的友元函数。不能重载为类的静态成员应该比较容易理解,因为静态成员函数是属于整个类的,不是属于某个对象的,它只能去操作类静态数据成员。而赋值运算符“=”是基于对象操作的。那么为什么赋值运算符不可以重载为类的友元函数?像同样都是双目运算符的+为什么它就可以呢? 在讨论这问题之前,先看一测试的程序: 代码如下:#include using namespace std;

weixin_38616435
评论
收藏 已收藏
分享
返回顶部
qq_30499345
C++ 语言 65,214 成员 250,514 内容