草庐IT

private-inheritance

全部标签

C++ - 如果构造函数是私有(private)的,这会做什么?

在下面的代码中,为什么编译器没有报错mClass2?classCMyClass{private:CMyClass(){}};voidTestMethod(){CMyClassmClass1;//Fails.CMyClassmClass2();//Works.} 最佳答案 因为您刚刚声明了一个返回CMyClass的零参数函数mClass2。这是一个有效的选项,因为可能存在该函数可以访问的staticCMyClass实例。请注意,CMyClass仍然有一个公共(public)复制构造函数。(为了说服自己,将此模块编译为汇编程序并观察注释

c++ - 如何与私有(private)嵌套类成为 friend

我认为我可以这样做:classTestA{private:classNested{};};classTestB{public:friendclassTestA;friendclassTestA::Nested;};但我得到一个错误:ErrorC2248'TestA::Nested':cannotaccessprivateclassdeclaredinclass有没有办法让私有(private)嵌套类成为friend?我该怎么做?我在尝试在MSVC2017(C++17)中编译MSVC6项目时遇到此错误。我想它当时有效。 最佳答案 与您

c++ - 在 C++ 中继承私有(private)成员

假设一个类有私有(private)数据成员,但setter和getter在公共(public)范围内。如果你从这个类继承,你仍然可以调用那些setter和getter——允许访问基类中的私有(private)数据成员。既然提到派生类不能继承私有(private)数据成员,这怎么可能 最佳答案 派生类不会继承访问私有(private)数据成员。但是,它确实继承了一个完整的父对象,其中包含该类声明的所有私有(private)成员。 关于c++-在C++中继承私有(private)成员,我们在

c++ - 如何在不创建 "friend"的情况下访问类外的私有(private)数据成员?

这个问题在这里已经有了答案:CanIaccessprivatemembersfromoutsidetheclasswithoutusingfriends?(27个回答)关闭5年前。我有一个classA,如下所述:-classA{intiData;};我既不想创建成员函数,也不想继承上面的classA,也不想改变iData的说明符。我的疑惑:-如何访问一个对象的iData,比如obj1,它是classA的一个实例?如何改变或操作对象obj1的iData?注意:不要使用friend。 最佳答案 这是一种方法,但不推荐classWeak{

c++ - 澄清 Sean Parent 的谈话 "Inheritance is the base class of evil"

SeanParent的演讲,Inheritanceisthebaseclassofevil,表示多态性不是类型的属性,而是如何使用它的属性。作为一个经验法则,不要使用继承来实现接口(interface)。这样做的许多好处之一是类的去虚拟化,这些类仅仅因为它们实现了一个接口(interface)而具有虚函数。这是一个例子:classDrawable{public:virtualvoiddraw()=0;};classDrawA:publicDrawable{public:voiddraw()override{//dosomething}};classUseDrawable{public:

c++ - 静态方法可以访问同一类的私有(private)方法吗?

由于单例/命名构造函数,我有这个问题。在这两种情况下,真正的构造函数都是protected或私有(private)的,两者都不能从外部访问。例如,一个简短的命名构造函数是这样的:classA{public:staticAcreateA(){returnA(0);}//namedconstructorprivate:A(intx);};intmain(void){Aa=A::createA();}我认为静态方法只能访问静态数据成员,或者通过现有对象访问私有(private)数据/方法。但是,在上面的代码中,私有(private)构造函数A()不是静态的,在调用它的时候,也不存在任何对象。

c++ - 从模板类赋值运算符访问私有(private)成员变量

我有一个模板化的容器类。我正在重载赋值运算符,以便也可以分配派生类型。我的问题是,当类型不同时,我无法访问容器类的私有(private)成员。获得访问权限的最佳方法是什么?成员变量不能通过公共(public)getter访问。谢谢!示例代码://Note:varisprivatetemplateContainer&Container::operator=(constContainer&rhs){if(*this!=rhs)var=rhs.var;//worksforsametypereturn*this;}templatetemplateContainer&Container::ope

c++ - 使用模板技巧访问私有(private)成员

来自博客文章Accesstoprivatemembers:Safernastiness由JohannesSchaub-litb:templatestructRob{friendtypenameTag::typeget(Tag){returnM;}};//usestructA{A(inta):a(a){}private:inta;};//tagusedtoaccessA::astructA_f{typedefintA::*type;friendtypeget(A_f);};templatestructRob;intmain(){Aa(42);std::cout如何get函数可以从a调用对

c++ - 私有(private)继承VS组合: when to use which?

私有(private)继承VS组合。我有点困惑何时使用它们。由于私有(private)继承在某种程度上密封了继承链,给定:classA{private:intz;protected:inty;public:intx;};classB:privateA{/*B'sdatamembersandmethods*//*BhasaccessonlytoA'spublicandprotected*/};classC:publicB{/*canaccessnofieldsofB*/};C将无法使用B的任何字段。什么时候使用私有(private)继承,什么时候使用组合?谢谢!

c++ - 在 C++ 中调用私有(private)方法

这纯粹是一个理论问题,我知道如果有人将方法声明为私有(private),您可能不应该调用它。我设法调用私有(private)虚拟方法并更改实例的私有(private)成员,但我不知道如何调用私有(private)非虚拟方法(不使用__asm)。有没有办法获得指向方法的指针?还有其他方法吗?编辑:我不想更改类定义!我只想要一个黑客/解决方法。:) 最佳答案 见myblogpost.我在这里重新发布代码templatestructresult{/*exportit...*/typedeftypenameTag::typetype;sta