求助 声明友元函数 依然无法访问private数据
Coordinate.h
Coordinate.cpp
demo.cpp
IDE环境是VS2016 问题在于定义输出符号的重载的时候,VS提示无法访问m_iX 和m_iY
#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);*/
};
#endifCoordinate.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
...全文
相关推荐
友元函数详细讲解
友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)。
C++友元函数及友元类全总结
本文档详细介绍了C++友元函数及友元类,方便大家对比学习
友元函数和友元类_友元函数用法_
私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行。这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦。
VC6.0中重载操作符友元函数无法访问类的私有成员的解决办法.docx
。
解析C++中不能重载为友元函数的四个运算符
C++规定有四个运算符 =, ->, [], ()不可以是全局域中的重载(即不能重载为友员函数),这是为什么呢?现在先说说赋值运算符“=”的重载C++规定赋值运算符“=”只能重载为类的非静态成员函数,而不可以重载为类的友元函数。不能重载为类的静态成员应该比较容易理解,因为静态成员函数是属于整个类的,不是属于某个对象的,它只能去操作类静态数据成员。而赋值运算符“=”是基于对象操作的。那么为什么赋值运算符不可以重载为类的友元函数?像同样都是双目运算符的+为什么它就可以呢? 在讨论这问题之前,先看一测试的程序: 代码如下:#include using namespace std;


