1
#include <iostream>
using namespace std;

class CBase
{   
    public:
    int a;
    int b;
    private:
    int c;
    int d;
    protected:
    int e;
    int f;
    //friend int cout1();
 };

class CDerived : public CBase
{
    public:
    friend class CBase;
    int cout1()
    {
        cout << "a" << endl;
        cin >> a;
        cout << "b" << endl;
        cin >> b;
        cout << "c" << endl;
        cin >> c;
        cout << "d" << endl;
        cin >> d;
        cout << "e" << endl;
        cin >> e;
        cout << "f" << endl;
        cin >> f;
        cout << a << "" << b << "" << c << "" << d << "" << e << "" << f << "" << endl;
    }
};

int main()
{
    CDerived chi;
    chi.cout1();
}

フレンドクラスとフレンド機能の使い方は?私を助けてください。私は多くの同様のエラーがあります:

c6.cpp: In member function int CDerived::cout1():
c6.cpp:10: error: int CBase::c is private
c6.cpp:30: error: within this context
  c6.cpp:11: error: int CBase::d is private
c6.cpp:32: error: within this context
  c6.cpp:10: error: int CBase::c is private
c6.cpp:37: error: within this context
  c6.cpp:11: error: int CBase::d is private
c6.cpp:37: error: within this context
4

5 に答える 5

1

最善の解決策は、基本クラスからアクセスするフィールドをプライベートではなく保護することです。それでも を使いたい場合は、そのクラスにフレンド クラスをfriend作成する必要があります。CDerivedCBase

于 2013-06-26T08:39:52.217 に答える
1

あなたが言う時

class CDerived : public CBase
 {

    public:
    friend class CBase;

これは、が のプライベート メンバーにCBaseアクセスできることを意味しCDerived、その逆ではありません。設計によっては、これらのメンバーを作成した方がよい場合もありますprotectedCDerivedそれ以外の場合は、 のフレンドとして宣言する必要がありますCBase

于 2013-06-26T08:40:49.030 に答える