2017-10-13 13 views
1
#include <iostream> 
#include<string> 
using namespace std; 

class Human 
{ 
private: 
    string Name; 
    int Age; 
    friend class Utility; 
public: 
    Human(string InputName,int InputAge) 
    { 
     Name = InputName; 
     Age = InputAge; 
    } 
}; 
class Utility 
{ 
public: 
    void DisplayAge(const Human& Person) 
    { 
     cout<<Person.Age<<endl; 
    } 
}; 
int main() 
{ 
    Human FirstMan("Adam",25); 
    cout<<"Accessing private member Age via friend class: "; 
    Utility::DisplayAge(FirstMan); 
} 

で関数を呼び出しますオブジェクトなし?は、オブジェクトなしメンバ関数を呼び出すことはできませんが、私は私のコンパイラはまだ私が呼ぶと言い、なぜ私は..私はオブジェクト(FistMan)を送信行う関数を呼び出すunderstand..whenていないオブジェクト

+0

静的にします。その後、それは動作します。 'static void DisplayAge(const Human&Person)'です。ユーティリティクラスでは、ほとんどの場合、すべての関数が静的です:) – tilz0R

+0

オブジェクトを持つ関数を呼び出すことはありません。クラス名はオブジェクトではありません。最初にオブジェクトを作成する: 'ユーティリティの無能力;'その関数を呼び出す: 'myutility.DisplayAge(FirstMan);'。 – Galik

+0

ええ、あなたは正しいです。ありがとうございます:) –

答えて

4

DisplayAgeUtilityは、である。したがって、それを呼び出すにはUitilityのインスタンスが必要です。

ので、機能static作るか、まだ匿名の一時的な

Utility().DisplayAge(FirstMan); 

良い経由で呼び出す、DisplayAgeHumanのメンバ関数を作ります。定義したい時はいつでも

#include <iostream> 
#include<string> 
using namespace std; 

class Human 
{ 
private: 
    string Name; 
    int Age; 
    friend class Utility; 
public: 
    Human(string InputName,int InputAge) 
    { 
     Name = InputName; 
     Age = InputAge; 
    } 
}; 

class Utility 
{ 
friend class Human; 
public: 
    Utility() = default; 
    static void DisplayAge(const Human& Person) 
    { 
     cout<<Person.Age<<endl; 
    } 
}; 

int main(void) 
{ 
    Human FirstMan("Adam",25); 
    cout<<"Accessing private member Age via friend class: "; 
    Utility::DisplayAge(FirstMan); 
} 
1

staticキーワードを使用して、あなたはあなたのクラス

であなたの関数を呼び出すことができるようになります機能。名前空間を使用する:

namespace Utility 
{ 
    inline void DisplayAge(const Human& Person) 
    { 
     cout<<Person.Age<<endl; 
    } 
} 

int main() 
{ 
    Human FirstMan("Adam",25); 
    cout<<"Accessing private member Age via friend class: "; 
    Utility::DisplayAge(FirstMan); 
} 
+0

はい、ワウありがとうございます! –

+0

一般的に悪い習慣であるので私は私の答えを使用しません。 @Bathshebaのものを使用してください – rak007

0

は、クラスを使用ドント:私は以下のコードを編集した

+0

'Age'はプライベートであり、変更を加えることなくアクセスすることはできません。 – NathanOliver

+0

しかし、あなたは名前空間を「友人」にすることはできません。それはここで重要です。 – Bathsheba

関連する問題