gpt4 book ai didi

c++ - 好友声明的反面

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:36 25 4
gpt4 key购买 nike

假设我们有一个具有私有(private)构造函数的类,通过 friend 我们可以允许某些特定类仍然创建此类的对象:

class Foo
{
friend class Bar;
private:
Foo();
};

class Bar
{
Bar()
{
//create a Foo object
}
};

现在,如果我想要 friend 的对立面,其中 Foo 看起来像这样:

class Foo
{
//enemy/foe??? class Bar; (if only)
public:
Foo();
};

然后 Bar 的任何方法都不能访问 Foo 构造函数/创建 Foo 的对象,但其他类可以(因为它是 公共(public))。

class Bar
{
Bar()
{
Foo foo; //compiler error
}
};

这样的构造是否可能,或者我是否坚持将 Foo 设为私有(private)并为所有类添加好友?

最佳答案

这样的东西是不存在的,而且毫无意义。想象一下你有这样的情况:

class Foo
{
enemy class Bar;

public:
Foo() {}
};

class Bar
{
void evil() { Foo{}; }
};

没有什么能阻止 Bar 的实现者这样做:

class Bar
{
void evil() { do_evil(*this); }
};

void do_evil(Bar &self)
{
Foo{};
}

do_evil 不是 Bar 的成员(它是一个全局函数),因此它不是敌人。因此,可以轻松规避这种不友好。

关于c++ - 好友声明的反面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52892749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com