C++ <<运算符重载,无友元功能
C++ << operator overloading without friend function
正如主题所说。有可能这样做吗?我能够在重载"+"运算符中实现这一点,但是,我不能用"<lt;'操作人员
这是一个适用于我的朋友功能的代码示例:
class Punkt2D
{
int x,y;
public:
Punkt2D(int wartoscX, int wartoscY) : x(wartoscX), y(wartoscY) {}
friend ostream& operator<<(ostream& out, Punkt2D& punkt);
};
ostream& operator<<(ostream& out, Punkt2D& punkt)
{
out << "(" << punkt.x << ", " << punkt.y << ")" << endl;
return out;
}
int main()
{
Punkt2D p1(10,15);
cout << p1 << endl;
return 0;
}
我在"+"上尝试了这个代码,但没有成为该函数的好友。其他运营商也可以这样做吗?也许这是一个愚蠢的问题,但我对C++还很陌生,找不到任何关于这个主题的资源:(
class Vector
{
public:
double dx, dy;
Vector() {dx=0; dy=0;}
Vector(double x, double y)
{
cout << "Podaj x " << endl;
cin >>x;
cout << "Podaj y " << endl;
cin >> y;
dx = x; dy = y;
}
Vector operator+ (Vector v);
};
Vector Vector::operator+ (Vector v)
{
Vector tmpVector;
tmpVector.dx = dx +v.dx;
tmpVector.dy = dy+ v.dy;
return tmpVector;
}
int main()
{
double d,e;
Vector a(d,e);
Vector b(d,e);
Vector c;
c = a +b;
cout<<endl << c.dy << " " << c.dx;
return 0;
}
只要函数只调用类的public
成员函数(或访问public
数据成员,如果有的话),它就不需要是朋友。
您的Vector
示例仅访问public
成员,因此它有效。
您的Punkt2D
正在访问private
成员,因此操作员需要是您的朋友。
它需要是一个朋友才能访问私人成员。
在Vector
中,成员是公开的,所以这是不同的。
流运算符:
operator << output
operator >> input
当您使用这些作为流运算符(而不是二进制移位)时,第一个参数是流。由于您没有访问流对象的权限(不能由您修改),这些不能是成员运算符,它们必须在类的外部。因此,他们必须是类的朋友,或者可以访问为您进行流式处理的公共方法。
相关文章:
- C++模板来检查友元函数的存在
- 模板类无法识别友元运算符
- 如何使用单独文件中的派生类访问友元函数对象
- 模板化的类和友元函数
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- 如何在嵌套类中正确使用友元声明?
- 友元函数无法访问私有数据成员 (c++)
- 继承和友元函数,从基类访问受保护的成员
- 将子类方法声明为基类的友元
- 如何在友元函数中使用静态成员而不添加前缀 [类名]::
- 在将函数声明为友元时,尖括号的含义是什么?
- 在模板类之外定义友元函数的正确方法是什么?
- 2个模板化类的非模板友元函数未定义引用错误
- 友元方法作为常量
- C++ 友元函数和私有构造函数
- 使第二个类的构造函数成为第一个类中的友元函数
- 在为嵌套类定义行外友元时,我真的必须打破封装吗?
- 未定义的类模板不会实例化以检查友元函数
- C++类中的友元函数有问题?
- 使用typedef'ed返回类型声明友元函数时出现编译器错误