2

クラスにフレンド関数を持つプライベートコンストラクターがある場合、フレンド関数でプライベート構築を許可しない方法はありますか。静的メソッドのみがオブジェクトの作成を担当する必要があり、このコンパイラ以外はエラーメッセージをフラッシュする必要があります

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

class a
{

public:
    void see ()
    {

    cout<<"Motimaa";

    }
    static a& getinstance()
    {
        static a instance;
        return instance;
    }

private:
    a() {};
    friend void access();
};
void access ()
{
a obj;
obj.see();//still friend function can access
}

int main()
{

a::getinstance().see();

access();
return 1;

}
4

2 に答える 2

1

フレンド関数はすべてのプライベート メンバーと変数にアクセスできますが、既定のコンストラクターの誤った使用を明示的に停止しようとしていると仮定すると、問題の潜在的な回避策があります。

デフォルトのコンストラクターがプログラムを強制終了させる可能性があります。ここで、無意味な引数であっても、少なくとも 1 つの引数を取る 2 番目のコンストラクターを作成します。

次に例を示します。

private:
  a() { cerr<<"Invalid call to constructor for object a!"; exit(); };
  a(bool dummyArg) {}

public:
  static a& getInstance() {
    static a instance(true);
    return a;
  }
于 2013-10-24T23:48:30.350 に答える
0

フレンド関数は、フレンドシップ クラスのすべてのメンバーにアクセスできます。

于 2013-10-24T22:42:54.323 に答える