正如話題所述。有沒有可能做到這一點?我能夠在超載「+」運算符中實現這一點,但是,我無法通過'< <'運算符來實現。C++ <<不帶朋友功能的操作符重載
這是與朋友的功能對我的作品的代碼示例:
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;
}
好吧,我有點困惑,因爲答案似乎是矛盾的。 如果該類的所有成員都是公共的,那麼該代碼行看起來會不會使該函數變得友好? 我只關注ostream元素,即函數的聲明和定義。 – Andy
由於聲明不是類的成員(例如在頭文件中),所以在類聲明之後將聲明形式'std :: ostream&operator <<(std :: ostream&out,const Punkt2D&punkt)'。運算符<<()的定義(即實現)(它需要在某處,但不需要在頭中,除非被內聯),則需要避免訪問「私有」或「受保護的成員全班同學 – Peter
謝謝彼得:) – Andy