Có phải chức năng bạn bè phải được xác định rõ ràng bên ngoài lớp học không?
Nếu vậy tại sao tôi có thể khai báo một hàm bạn bè bên trong một định nghĩa lớp giống như bất kỳ hàm thành viên nào?
Đây là gì?
Chỉ với một số nhà khai thác chẳng hạn như nhà điều hành <
hoặc có thể áp dụng cho tất cả các nhà khai thác không?
Nếu có thể áp dụng cho tất cả, Có bất kỳ bất lợi nào khi thực hiện việc này không?
Có nên tránh không? Nếu vậy tại sao?Tại sao có thể đặt định nghĩa chức năng người bạn bên trong định nghĩa lớp?
class person
{
public:
bool operator<(int num)
{
return x < num ? true : false ;
}
bool operator<(person& p)
{
return x < p.x ? true : false ;
}
friend bool operator<(int num, person &p)
{
return p.x < num ? true : false ;
}
void setX(int num)
{
x = num;
}
private:
int x;
};
Cập nhật:
Tôi không yêu cầu cho việc lựa chọn phi thành viên điều hành quá tải hoặc người điều khiển thành viên quá tải.
Điều tôi muốn biết là:
Tại sao chúng tôi được phép di chuyển định nghĩa phương pháp bạn bè trong định nghĩa lớp của chúng tôi theo định nghĩa ?.
Nó không vi phạm bất kỳ điều gì? Nếu nó không phải là, Tại sao chúng ta sẽ có bạn bè ở vị trí đầu tiên?
Chúng tôi chỉ đơn giản là xác định tình trạng quá tải của các hàm thành viên. Nhưng tôi đang nói về điều này, Tại sao trình biên dịch không phàn nàn rằng tôi không định nghĩa hàm bạn bè bên ngoài định nghĩa lớp vì nó không có t cần phải được bên trong của nó (vì tham số lớp nó có) Vậy tại sao chúng ta được phép định nghĩa một hàm bạn bè bên trong một định nghĩa lớp?
Nếu bạn hỏi về định nghĩa của hàm 'friend', thì bạn nên thay đổi tiêu đề câu hỏi để phản ánh điều đó. – juanchopanza
tôi nên viết gì? – Breeze
Bạn có thể làm điều đó vì tiêu chuẩn cho phép nó một cách rõ ràng. Đối với lý do tại sao tiêu chuẩn cho phép nó - tôi đoán là nó được coi là đủ thuận tiện để có giá trị nó. –