gpt4 book ai didi

C++:授予对私有(private)运算符 "passing through"友元类的访问权限,可能吗?

转载 作者:太空狗 更新时间:2023-10-29 21:36:26 25 4
gpt4 key购买 nike

假设我已经定义了这两个类:

class Node
{
friend class list;

public:
Node (const int = 0);
Node (const Node &);

private:
int val;
Node * next;
Node & operator= (const Node &);
};


class list
{
public:
list ();
list (const list &);
~list ();

list & operator+= (const Node &);
Node & operator[] (const int) const;

private:
list & delete_Node (const int);
Node * first;
int length;
};

然后,在 main.cpp 文件中,我有这些行:

list l1;

l1 += 1;
l1 += 41;
l1[1] = 999; // <-- not permitted: Node::operator= is private

我的问题是:是否可以授予对 Node::operator= 的访问权限当且仅当左值是列表中的引用(这是一个 friend Node 的类)即使 main() 不是友元函数?

最佳答案

那行不通,但这会:

class Node
{
friend class list;

public:
Node (const int = 0);
Node (const Node &);

private:
int val;
Node * next;
Node & operator= (const Node &);
};

class Magic
{
public:
operator Node&() { return node; }
Node& operator=(int v) { return list::assign(node, v); }

private:
friend class list;
Magic(Node& n) : node(n) {}
Node& node;
};

class list
{
public:
Magic operator[] (int) const { return const_cast<Node&>(*first); }

private:
static Node& assign(Node& n, int v) { n.val = v; return n; }
};

现在忘记你曾经见过这个,因为无论如何这可能是一个非常糟糕的设计。

关于C++:授予对私有(private)运算符 "passing through"友元类的访问权限,可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40359022/

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