草庐IT

Friend-ing

全部标签

c++ - 在模板类中声明的 friend 模板函数导致 undefined symbol 链接错误

几天来我一直在努力反对这个问题,查找它并在开源项目中寻找类似的代码:无法真正找到我做错了什么。基本上,给定以下代码(提炼出其本质):#includeusingstd::cout;usingstd::endl;usingstd::string;templateclassNode{Tvalue_;public:Node(constT&value):value_(value){}Tconstvalue()const{returnvalue_;}friendstd::ostream&operator&node);Nodeoperator+(constNode&other){returnNode

c++ - 派生类是否被视为 friend ?

如果我创建基类A并且A是类B的友元,那么从A派生的类是否可以按自己的喜好访问B,否则它允许什么?谢谢 最佳答案 structA{};structAder:A{};structB{friendstructA;};没有。在C++中,友元不是继承的。它也不具有传递性。Ader不能作为friend访问B除非B明确给予友元,只是因为它的基础A是的friend>B. 关于c++-派生类是否被视为friend?,我们在StackOverflow上找到一个类似的问题: htt

c++ - 在 C++ 中,我可以防止派生类被 friend 以外的类实例化吗?

在C++中,如果我有一个抽象基类,是否可以防止它的派生类被基类知道的friend以外的类实例化? 最佳答案 您可以将构造函数定义为私有(private)的,就像任何其他函数一样。例如:classfoo{friendfoo*FooConstructor(void);public:voidMethod();voidMethod2();private:foo();foo(const&foo);};foo*FooConstructor(void){returnnewfoo();}这可以防止以任何方式创建foo,使用FooContructor

支持 Scott Meyer 建议的 C++ IDE : Prefer non-member non-friend functions over members

ScottMeyer关于非成员函数增加封装并允许更优雅的设计(设计方面)的论点对我来说似乎非常有效。看这里:Article但是我对此有疑问。(似乎还有其他人,尤其是库开发人员,他们通常完全忽略这一点)当我使用成员函数时,代码通常看起来更好、更合乎逻辑。不过,这可能是一种后天习得的品味,只是需要一些时间来习惯先查看算法,然后再查看对象。(颤抖)所以也许我只有一个问题:有了成员函数,我和我的IDE就知道类可以做什么。对我来说,这是巨大的!我使用任何不支持成员函数代码完成的东西来编程。在设计良好的库中,它完全取代了我的文档。即使我会查看api文档,浏览成员列表也感觉绝对自然、合乎逻辑,我可以

c++ - friend 功能和 friend 类有什么区别?

友元函数和友元类有什么区别?应该在哪里使用friend关键字? 最佳答案 简而言之,一个是类,一个是函数。对于函数,只有一个函数可以访问私有(private)成员。对于一个类,整个类及其所有函数都可以访问友好类的私有(private)成员。friend关键字用于授予对私有(private)数据成员的访问权限。有时您可能需要帮助类或免费类来访问不同类的私有(private)成员。对于函数,一个常见的例子是运算符重载。也许您想重载+运算符。您可以在类外部声明一个operator+函数(这样它就可以在没有对象的情况下被调用)并且它需要访问

java - Java 是否提供 'friend' 访问修饰符?

我想知道Java是否提供“friend”(如在C++中)访问修饰符?有人说我们可以将“friend”作为Java中的默认修饰符。是真的吗? 最佳答案 Java中的默认访问修饰符允许同一包中的任何代码访问成员。 关于java-Java是否提供'friend'访问修饰符?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5770852/

c++ - friend 困惑

$11.4/5-“[...]类中定义的友元函数在定义它的类的(词法)范围内[...]”这句话是什么意思?structA{typedefintMYINT;voidf2(){f();}//Error,'f'isundefinedfriendvoidf(){MYINTmi=0;}//Whydoesthiswork,shouldn'itbeA::MYINT?voidf1(){f();}//Error,'f'isundefined};intmain(){}这里令人困惑的是从“A::f1”调用“f”是完全可以理解的。但是,为什么当friend处于友好类的“词汇”范围内时,从“A::f2”调用“f”

c++ - "already a friend"警告什么时候有用?

我的代码使用大量预处理器框架来生成一些实用程序类。显然,某些宏会导致相同的friend声明在一个类中被包含两次,如下所示:classFriendly{//:::friendclassBestie;friendclassBestie;//:::};当使用gcc(4.8.1)构建时,它会生成类似这样的警告BestieisalreadyafriendofFriendly[enabledbydefault]我真的看不出这个警告有什么用。我很好奇为什么它首先包含在gcc中。然而,由于SO社区很难回答这个问题,我将这样陈述我的问题:出现指示?我能想到的唯一可能暗示的问题是“你可能打算在这里写一些别

c++ - 内部类、pimpl 和一个 friend 类——不同意的编译器

我正在研究一些旧的库代码,其基本目标是重构它。这段旧代码并不完全符合最佳实践和美观(是的-friend是坏人,在发现以下内容后已将其删除-因为它是重构中的疏忽)。现在准备运行一些单元测试,我用clang++、g++和vc++编译了代码(2005-是的,我知道它很旧,但为了向后兼容-我必须这样做)。g++和clang++编译和运行没有错误,但是VisualC++报错,所以在查看代码后,我发现了一些类似的东西:#includeclassone{private:structprivate_impl;private_impl*pimpl_;public:one();~one();voidsay

c++ - 如何声明两个类使得 A 具有 B 的成员并且 B 将 A 的成员标记为 friend ?

我正在尝试做C++Primer第5版中的练习7.32。该练习要求以下内容:DefineyourownversionsofScreenandWindow_mgrinwhichclearisamemberofWindow_mgrandafriendofScreen.下面是文中给出的Screen、Window_mgr和clear的定义。classScreen{public:usingpos=std::string::size_type;Screen(posht,poswd,charc):height(ht),width(wd),contents(ht*wd,c){}private:poshe