草庐IT

private-inheritance

全部标签

c++ - 私有(private)和 protected 纯虚函数之间有什么区别吗?

我可以理解,可能有理由将已实现的(与纯的)虚函数声明为私有(private)或protected。Afaik,如果您将实现的虚拟方法声明为protected,您的子类可以调用基类的方法(而其他人不能)。如果将其声明为私有(private),则只有基类可以调用虚拟方法的默认实现。但是,对于纯虚拟,没有基本实现......那么将纯虚拟声明为私有(private)或protected在功能上不等效吗?protected纯虚拟没有意义,因为您永远无法调用基类的相应方法。protected纯虚拟是否有任何意义?关于SO有一些类似的主题,但我找不到任何可以简明扼要地回答我的问题的内容。

c++ - 私有(private)和 protected 纯虚函数之间有什么区别吗?

我可以理解,可能有理由将已实现的(与纯的)虚函数声明为私有(private)或protected。Afaik,如果您将实现的虚拟方法声明为protected,您的子类可以调用基类的方法(而其他人不能)。如果将其声明为私有(private),则只有基类可以调用虚拟方法的默认实现。但是,对于纯虚拟,没有基本实现......那么将纯虚拟声明为私有(private)或protected在功能上不等效吗?protected纯虚拟没有意义,因为您永远无法调用基类的相应方法。protected纯虚拟是否有任何意义?关于SO有一些类似的主题,但我找不到任何可以简明扼要地回答我的问题的内容。

c++ - 私有(private)范围内私有(private)继承的动态向下转换

对thisquestion的调整我遇到的。考虑:classA{};classB:privateA{staticvoidfoo();};voidB::foo(){B*bPtr1=newB;A*aPtr1=dynamic_cast(bPtr1);//givespointerB*bPtr2=dynamic_cast(aPtr1);//givesNULL}因为aPtr1实际上属于B*类型,并且我们可以完全访问B及其继承自A,我希望这两个Actor都能工作。但他们没有;为什么?还有其他方法可以实现这种Actor吗?注意:如果foo()不是B的成员,则两个强制转换都会失败。如果B公开继承自A,则两

c++ - 私有(private)范围内私有(private)继承的动态向下转换

对thisquestion的调整我遇到的。考虑:classA{};classB:privateA{staticvoidfoo();};voidB::foo(){B*bPtr1=newB;A*aPtr1=dynamic_cast(bPtr1);//givespointerB*bPtr2=dynamic_cast(aPtr1);//givesNULL}因为aPtr1实际上属于B*类型,并且我们可以完全访问B及其继承自A,我希望这两个Actor都能工作。但他们没有;为什么?还有其他方法可以实现这种Actor吗?注意:如果foo()不是B的成员,则两个强制转换都会失败。如果B公开继承自A,则两

c++ - 私有(private)继承隐藏基类,出现 "inaccessible within this context"错误

我遇到了类似于Privateinheritancerendersclassinaccessible中描述的问题当我尝试在派生类中声明基类的成员时,私有(private)继承的基类给出“在此上下文中不可访问”错误。在上述情况下,使用::X显式引用X是可行的,但如果代码位于以下函数中会怎样:voidfooby(){classX{};classY:privateX{};classZ:publicY{public:Xx;//Compiler"inaccessiblewithinthiscontext"error};};在这种情况下你如何引用X?如果fooby是一个结构/类,那么::fooby:

c++ - 私有(private)继承隐藏基类,出现 "inaccessible within this context"错误

我遇到了类似于Privateinheritancerendersclassinaccessible中描述的问题当我尝试在派生类中声明基类的成员时,私有(private)继承的基类给出“在此上下文中不可访问”错误。在上述情况下,使用::X显式引用X是可行的,但如果代码位于以下函数中会怎样:voidfooby(){classX{};classY:privateX{};classZ:publicY{public:Xx;//Compiler"inaccessiblewithinthiscontext"error};};在这种情况下你如何引用X?如果fooby是一个结构/类,那么::fooby:

c++ - 私有(private)模板函数

我有一个类:C.hclassC{private:templatevoidFunc();//alotofotherfunctions};C.cpp//alotofotherfunctionstemplatevoidC::Func(){//theimplementation}//alotofotherfunctions我知道,在cpp文件中移动模板实现不是最好的主意(因为它不会从其他cpp中看到,它可能包含带有模板声明的header)。但是私有(private)函数呢?谁能告诉我在.cpp文件中实现私有(private)模板函数是否有缺点? 最佳答案

c++ - 私有(private)模板函数

我有一个类:C.hclassC{private:templatevoidFunc();//alotofotherfunctions};C.cpp//alotofotherfunctionstemplatevoidC::Func(){//theimplementation}//alotofotherfunctions我知道,在cpp文件中移动模板实现不是最好的主意(因为它不会从其他cpp中看到,它可能包含带有模板声明的header)。但是私有(private)函数呢?谁能告诉我在.cpp文件中实现私有(private)模板函数是否有缺点? 最佳答案

c++ - 在没有 friend 的情况下在 C++ 中测试私有(private)类成员

这个问题在这里已经有了答案:HowdoItestaclassthathasprivatemethods,fieldsorinnerclasses?(58个回答)关闭4年前.今天我和一位同事讨论了是否在类里面测试私有(private)成员或私有(private)状态。他几乎说服了我为什么这样做是有道理的。这个问题的目的不是重复已经存在的关于测试私有(private)成员的性质和原因的StackOverflow问题,例如:Whatiswrongwithmakingaunittestafriendoftheclassitistesting?在我看来,同事的建议有点脆弱,将friend声明引入

c++ - 在没有 friend 的情况下在 C++ 中测试私有(private)类成员

这个问题在这里已经有了答案:HowdoItestaclassthathasprivatemethods,fieldsorinnerclasses?(58个回答)关闭4年前.今天我和一位同事讨论了是否在类里面测试私有(private)成员或私有(private)状态。他几乎说服了我为什么这样做是有道理的。这个问题的目的不是重复已经存在的关于测试私有(private)成员的性质和原因的StackOverflow问题,例如:Whatiswrongwithmakingaunittestafriendoftheclassitistesting?在我看来,同事的建议有点脆弱,将friend声明引入