草庐IT

private-inheritance

全部标签

c++ - 如何 "inherit"来自 STL 类的迭代器?

我正在尝试使用我编写的一些算法创建一个名为tableaux的对象类,它们本质上是无符号整数vector的vector(它们类似于矩阵,只是行的长度可以不同)。主要问题是我想从vector类继承这些对象的迭代器,但我不知道如何做。我看了几个相关的问题和答案,我很容易继承std::vector>公开的,但共识是,由于STL容器没有虚拟析构函数或其他原因,这是不好的。所以我决定尝试通过组合来“继承”。这是我要实现的目标的一个最小示例:#include#includeclasstableau{private:std::vector>rep;public:usingstd::vector>::i

c++ - 为什么 COM DLL 导出应标记为 "PRIVATE"?

在构建COMDLL时,为什么要导出DllGetClassObject、DllCanUnloadNow、DllRegisterServer、DllUnregisterServer等。在关联的.DEF文件的EXPORTS部分中标记为PRIVATE? 最佳答案 当您构建一个DLL时,链接器会自动为该DLL创建一个导入库。它包含所有导出函数的列表。您在另一个使用DLL的项目中使用该导入库。特定于COM服务器的是,这4个导出函数总是通过GetProcAddress()找到,并且您永远不会隐式依赖于COMdll。您始终使用CoCreateIns

c++ - 具有私有(private)构造函数和自身静态数组的类

抱歉,如果标题令人困惑,我找不到简单的方法来用简单的句子来写它。无论如何,我面临的问题://header:classSomeThing{private:SomeThing(){}//lookup_table_0;staticSomeThinglookup_table_1[64];};getThatThing函数旨在从查找表中返回一个实例。//intheimplementationfile-definitionsoflookuptablesstd::arraySomeThing::lookup_table_0;//errorSomeThingSomething::lookup_table

c++ - C++中 protected 和私有(private)派生之间的区别是什么

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Differencebetweenprivate,publicandprotectedinheritanceinC++在C++中派生为protected或private有什么区别?我想不通,因为两者似乎都限制从派生类对象访问基类成员

c++ - 如何让一个方法访问其他模板类实例的私有(private)成员?

这个极小的示例将无法编译,因为A无法访问私有(private)成员i在AtemplateclassA{inti;public:templatevoidcopy_i_from(constA&a){i=a.i;}};intmain(void){Aai;Aad;ai.copy_i_from(ad);return0;}我知道我可以让所有模板实例成为彼此的friend(参见:Howtoaccessprivatemembersofothertemplateclassinstances?),但由于我只有一种方法需要访问权限(如示例中所示),我希望将友元限制为那个方法。这可能吗?

c++ - 私有(private)复制构造函数/赋值运算符和复制初始化

这是thisquestion的后续在下面的代码中,为什么第1行可以编译而第2行和第3行没有编译(使用VisualC++2010)classABase{protected:ABase(){}~ABase(){}private:ABase(constABase&);constABase&operator=(constABase&);};classA:ABase{};classB{public:B(){}~B(){}private:B(constB&);constB&operator=(constB&);};intmain(void){Aa=A();//line1Aa2(a);//line2

c++ - 在没有 friend 的情况下授予对私有(private)构造函数的访问权限?

我正在写一些代码,我遇到了类似的情况:structBar;structFoo{friendstructBar;private:Foo(){}voidf(){}voidg(){}};structBar{Foo*f;Bar(){f=newFoo();}~Bar(){deletef;}};intmain(){Barb;}我宁愿Bar不是Foo的friend,因为除了Foo的构造函数Bar不需要访问任何Foo的私有(private)方法(因此不应该访问)。有没有办法只允许Bar创建Foo而不让它们成为friend?PS:意识到问题可能不是100%清楚。我不介意是否通过friend,只是所有Ba

c++ - 为什么 C++ 禁止 final 类的私有(private)继承?

C++11向C++引入了final关键字。它可以用于虚方法或类。将类声明为final禁止任何类型的继承:公共(public)的、protected和私有(private)的。structAfinal{};classB:privateA{};error:base'A'^ismarked'final'虽然禁止公共(public)继承是合理的(例如,如果我的类没有虚拟析构函数,或出于其他原因),但我为什么要禁止私有(private)继承?如果final禁止仅公共(public)继承,那么std::string和它在std中的其他friend可能是final--他们应该--因为没有虚拟析构函数

c++ - 为什么我不能从不同 namespace 中的友元类更改类的私有(private)成员?

我发现从好友类访问类的私有(private)成员时遇到问题。持有我要更改的私有(private)成员的类和进行更改的类在不同的命名空间中。friend类是在保存数据的类之后定义的,所以我尝试在命名空间外转发声明friend类。g++说我不能修改成员,因为它是私有(private)的,visualstudio好像觉得没问题。我是不是在做一些奇怪的非标准事情?为什么我不能更改成员?这是一个代表我的问题的简化片段:structS;namespaceN{classA{intm;public:A():m(5){};friendstructS;};}usingnamespaceN;structS{

c++ - 错误 C2248 : 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'

收到此错误,我很确定它在operatorvoidCRational::print()const{print(cout);}voidCRational::print(ostream&sout)const{if(m_denominator==1)cout 最佳答案 您需要通过引用而不是值返回ostream。它试图调用构造函数。也可以传递'a'作为引用:ostream&operator我还注意到打印方法可能是错误的。它有sout作为流的名称传递,但随后直接使用cout实现。应该是voidCRational::print(ostream&s