这合法吗?如果不允许,以下代码是否允许这样做?classFoo{friendclassFoo;} 最佳答案 那是多余的。Foo已经可以访问所有Foo成员。两个Foo对象可以访问彼此的成员。classFoo{public:inttouchOtherParts(constFoo&foo){returnfoo.privateparts;}private:intprivateparts;};Fooa,b;b.touchOtherParts(a);上面的代码可以正常工作。B将访问A的私有(private)数据成员。
我不完全明白这一点:classBase{public:Base(){cout是否因为有人可能使用bPtr调用call()而这实际上是在派生对象上完成的?还是有其他原因? 最佳答案 公有继承就是大家都知道Derived是从Base派生出来的。protected继承意味着只有Derived、Derived的friend以及从Derived派生的类知道Derived是从Base派生的。*私有(private)继承是指只有Derived和Derived的friend知道Derived是从Base派生的。由于您使用了私有(private)继承
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion通过将类的私有(private)成员转换为空指针然后再转换为结构来访问类的私有(private)成员是否合适?我认为我无权修改包含我需要访问的数据成员的类。如果不符合道德规范,我不想冒险以间接方式访问数据成员。编辑:不得不进一步编辑这个...我很确定这个类不会被修改,所以在那个程度上没关系...我唯一担心的是,如果编写该类的人知道这个,他可能不太满意:(。
我在VisualStudio2013和2017中发现std::unique_ptr的行为非常奇怪。让我们考虑一个例子:classBase{public:virtual~Base()=default;virtualvoidFoo()=0;};classDerived:privateBase{public:voidFoo()override{std::couta){a->Foo();}Foo(std::unique_ptr(newDerived()));//Compiles请注意,继承是私有(private)的。此示例仅在VisualStudio上编译。而且,虚函数调用是有效的,因为它是公
这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Whycaniaccessaderivedprivatememberfunctionviaabaseclasspointertoaderivedobject?#includeusingnamespacestd;classB{public:virtualvoidfn1(void){coutfn1();p->fn2();}为什么p->fn2()调用派生类函数,即使fn2在D中是私有(private)的?
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Cannotaccessprivatememberinsingletonclassdestructor我正在实现一个单例,如下所示。classA{public:staticA&instance();private:A(void){cout析构函数是私有(private)的。当程序即将终止时,是否会为对象theMainInstance调用它?我在VisualStudio6中试过,它给出了编译错误。"cannotaccessprivatememberdeclaredinclass..."在visualstudio
我有以下片段#include#includeclassC{C(){}};intmain(){static_assert(!boost::has_trivial_default_constructor::value,"Constructible");static_assert(!std::is_default_constructible::value,"Constructible");}条件不相等,但第一个条件工作正常,第二个构造给出错误,构造函数是私有(private)的。编译器gcc4.7...那么,这是gcc错误,还是由标准定义的?http://liveworkspace.org/
我正在用C++编写一个库。我的图书馆有两个类(class),A和B.我想隐藏A()引用我的库的任何代码的构造函数。我也要上课B能够调用A()构造函数。我有C#背景,对我的C++内存犹新。在C#中,我将简单地声明A()构造函数为internal.我读过在C++中执行此操作的最接近方法是friend的组合声明和前向声明。我该怎么做呢?下面是我的三个文件:嗯:#pragmaonceclassA{private:A();};B.h#pragmaonceclassA;classB{public:AcreateA();};B.cpp:#include"A.h"#include"B.h"AB::cr
这是一个说明我遇到的问题的玩具示例。该应用程序是相当无关紧要的(它本质上是一个链表元素,最后具有特殊行为)。我无法使用派生指针构造基类shared_ptr并且由于某种原因与我使用私有(private)继承的事实相关联。#include#include#includeusingnamespacestd;//AnIteminalinkedlistclassA{public://friendclassB;typedefboost::shared_ptrAPtr;A():next_(){}A(APtrn):next_(n){}APtrnext(){returnnext_;}voidsetNex
是否可以在另一个类中定义一个类私有(private)并将其用于数组?例如:classa{public:private:classb;bmyarray[10];classb{public:b(inta):a_val(a){}private:inta_val;};};忽略公共(public),我的语法有什么问题吗?是否也可以在A中创建一个成员函数来修改b的私有(private)值。例如,myarray[0].a_val=5;如果是这样,这个语法是否也正确? 最佳答案 不,您定义私有(private)嵌套类的语法没问题。尽管其他一些事情是