草庐IT

private-inheritance

全部标签

c++ - 使用 friend 函数,我们可以覆盖类的私有(private)成员吗?

在给定的C++代码中,DEF类的私有(private)成员在构造函数中初始化,并在友元函数中再次初始化。所以重定义会覆盖私有(private)变量还是构造函数给的值会一直存在?#include//classDEF;classABC{public:intfun(classDEF);};classDEF{private:inta,b,c;public:DEF():a(1),b(12),c(2){}friendintABC::fun(classDEF);/*Usingfriendfunctiontoaccesstheprivatememberofotherclass.*/voidfun_2(

c++ - 私有(private)静态成员可以用作其类的成员函数的默认参数吗?

哪一个编译器是正确的?classA{public:templatevoidfun(void(*f)()=funPrivate){}private:templatestaticvoidfunPrivate(){}};intmain(intargc,char**argv){Aa;a.fun();return0;}编译良好:gcc版本4.8.5(Ubuntu4.8.5-2ubuntu1~14.04.1)导致错误:clangversion3.4-1ubuntu3(tags/RELEASE_34/final)(basedonLLVM3.4)a.cpp:5:27:error:'funPrivate

c++ - 对于私有(private)继承,什么时候可以向上转型?

我有一个关于C++的私有(private)继承的问题。请参见以下代码示例:#includeclassFoo{public:virtualvoiddoSomething(intvalue){std::cout目前,我不明白(或找不到正确的C++规范)为什么可以在Bar的构造函数中使用调用函数foobar>*this尽管是私有(private)继承。如果我尝试在main函数中使用Bar对象b调用foobar函数,编译器会给出错误正如预期的那样,因为私有(private)继承。我忽略的foobar(*this,42)和foobar(b,42)之间有什么区别? 最佳

c++ - 使用元编程的私有(private)成员存在性测试,GCC vs clang,哪个是对的?

这更像是一个C++标准问题。考虑以下代码:templateclasshas_Data{typedefcharone;typedeflongtwo;templatestaticonetest(typeof(&C::Data));templatestatictwotest(...);public:enum{value=sizeof(test(0))==sizeof(char)};};classMyClass{private:structData{};};voidfunction(boolval=has_Data::value){}以上代码适用于gcc(GCC)4.4.3但是clang版本3

c++ - C++ 中的私有(private)基类可访问性

我最近不得不做这样的事情:classA{};classB:privateA{};classC:publicB{public:A*myA;};intmain(){return0;}而且我在尝试的三个编译器中都遇到了错误。当我将myA的声明更改为::A*myA时,一切正常。我查阅了C++标准,发现第11.2节第3段说:Note:Amemberofaprivatebaseclassmightbeinaccessibleasaninheritedmembername,butaccessibledirectly.哪个相关,但不清楚。为什么名称A不可访问?如果不隐藏A会出现什么问题?谢谢,-本

c++ - 将私有(private)函数覆盖到公共(public)函数的潜在危险是什么?

我刚刚发现在C++中允许将私有(private)函数从基对象覆盖为公共(public)函数,因为VisualStudio会产生0警告。这样做有什么潜在的危险吗?如果没有,在基础对象中声明一个私有(private)的、protected和公共(public)的虚函数有什么区别? 最佳答案 what'sthedifferencebetweendeclaringavirtualfunctioninprivate,protectedandpublicinabaseobject?不同之处在于,private虚函数只能从基类中调用。如果该函数不

c++ - 我应该从私有(private)派生类指针转换到它的基类吗?

我从C++FAQ中找到的Generally,No.Fromamemberfunctionorfriendofaprivatelyderivedclass,therelationshiptothebaseclassisknown,andtheupwardconversionfromPrivatelyDer*toBase*(orPrivatelyDer&toBase&)issafe;nocastisneededorrecommended.HoweverusersofPrivatelyDershouldavoidthisunsafeconversion,sinceitisbasedonapr

c++ - C++ 中的私有(private)虚函数是否有通用的命名约定?

C++中的私有(private)虚函数是否有通用的命名约定?我见过do_something(...)、something_vfunc(...)等约定。C++项目中通常使用哪种约定? 最佳答案 标准中使用的约定(例如在许多std::numpunct中)是do_something是一个protectedvirtual方法,并且something是调用它的public非virtual方法。 关于c++-C++中的私有(private)虚函数是否有通用的命名约定?,我们在StackOverflo

C++ 错误 : was not declared in this scope with private after public

试图修改来自thispage的代码.问题代码如下:#include#includetemplateclassconst_reverse_wrapper{public:const_reverse_wrapper(constT&cont):container_(cont){}decltype(container_.rbegin())begin()const{returncontainer_.rbegin();}decltype(container_.rend())end(){returncontainer_.rend();}private:constT&container_;};templ

c++ - 复杂的菱形继承(钻石问题) : C++ virtual inheritance

我有一个看起来像这样的菱形继承(钻石问题):__A/|\|B|\v|/vv\|v\vB2B3C\v/v/B4/\/D我尝试了很多方法来制作最好的虚拟继承来避免重复,但我找不到解决方案。类A包含一个位置。这是一个示例输出:Call:A()positionpointeris:0x2203be8Call:B()Call:B2()positionpointeris:0x2203be8Call:B3()positionpointeris:0x2203be8Call:C()positionpointeris:0x2203a28Call:B4()positionpointeris:0x2203be8