2014-09-23 5 views
0
class fraction 
{ 
long num; 
long den; 

public: 
fraction(long,long); 
fraction(); 
~fraction(); 
fraction(const fraction &); 
void setNum(long); 
void setDen(long); 
friend void print(const fraction&); 
}; 


void print(const fraction& s) 
{ 
cout<<s.num<<" "<<s.den<<endl; 
} 

и можно назватьМожете ли вы вызвать функцию друга при вызове функции-члена?

fraction f1(5,1); 
print(f1); 

Может ли быть изменен в некотором роде, так что мы можем назвать это как f1.print()?

ответ

2

No. Доступ к элементам можно получить только с помощью синтаксиса доступа к члену.

0

Могу ли он быть каким-то образом изменен?

// forward declare fraction 
class fraction; 

// declare funtion in global scope 
void print(const fraction&); 

class fraction 
{ 
public: 
    /* ... */ 

    // declare function as friend 
    friend void print(const fraction&); 

    // add member function 
    void print() const { ::print(*this); } 
}; 

void print(const fraction& s) 
{ 
    cout<< s.num << " " << s.den << endl; 
} 

int main() 
{ 
    fraction f1(5,1); 
    f1.print(); 
} 
0

Слово «друг» означает, что функция или класс упоминается является «другом» вашего класса, и дает «друг» разрешение на доступ к защищенным или частным пользователям, как если бы они были открытыми , Единственный эффект «друга» - это код внутри функции друга или класса друга. Кроме того, «друг» ничего не делает. Это не изменяет способ вызова или использования функции «друга».

0

Друг не является членом функции вашего класса и не может быть вызван как функция-член, функция друга означает, что эта функция имеет доступ ко всем членам вашего класса.

 Смежные вопросы

  • Нет связанных вопросов^_^