有没有办法在朋友功能中不允许私人建设,如果我们在班上有私人建设者和朋友功能。只有Static方法应该负责创建对象,而不是此编译器应该闪烁错误消息
#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;
}
答案 0 :(得分:1)
朋友函数可以访问所有私有成员和变量,但是对于您的问题有一个潜在的解决方法,假设您试图明确地停止意外使用默认构造函数。
您可能会使默认构造函数终止该程序。现在,创建第二个构造函数,该构造函数至少接受一个参数,即使它是一个毫无意义的参数。
以下是一个例子:
private:
a() { cerr<<"Invalid call to constructor for object a!"; exit(); };
a(bool dummyArg) {}
public:
static a& getInstance() {
static a instance(true);
return a;
}
答案 1 :(得分:0)
朋友功能可以访问所有朋友的成员。