C++ lt;lt; operator overloading without friend function(没有友元函数的C++lt;lt;运算符重载)
本文介绍了没有友元函数的C++<;<;运算符重载的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
正如主题所说的那样。有可能做到这一点吗?我可以在重载‘+’运算符时做到这一点,但是,我不能用‘<;<;’运算符做到这一点。
这是适用于我的Friend函数的代码示例:
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
成员,因此操作员需要成为朋友。
这篇关于没有友元函数的C++<;<;运算符重载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:没有友元函数的C++<;<;运算符重载
基础教程推荐
猜你喜欢
- C++,'if' 表达式中的变量声明 2021-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 设计字符串本地化的最佳方法 2022-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01