来自http://www.parashift.com/c++-faq-lite/basics-of-inheritance.html#faq-19.5Amember(eitherdatamemberormemberfunction)declaredinaprotectedsectionofaclasscanonlybeaccessedbymemberfunctionsandfriendsofthatclass,andbymemberfunctionsandfriendsofderivedclasses那么,如何访问派生类中的protected函数fun呢?#includeusingna
我注意到许多Poco类都有一个protected析构函数。这让他们编码起来更烦人。例如,这是我的一些代码:structW2:Poco::Util::WinRegistryConfiguration{typedefPoco::Util::WinRegistryConfigurationinherited;usinginherited::inherited;};std::stringget_documents_folder(){W2regc{"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\
classA{protected:intm_a;intm_b;};classB:publicA{};在B类中,我想将m_a设为私有(private)。下面的做法是否正确classB:publicA{private:intm_a;};这不会产生2个m_a拷贝吗? 最佳答案 调整成员访问控制的正确方法是使用usingdeclaration:classB:publicA{private:usingA::m_a;}只写intm_a;确实会导致m_a的两个拷贝,并且派生类将能够访问A的通过编写A::m_a复制m_a。
我试图让doSomeMethod()的返回类型与operator()相同在基类中,但如果它被声明为protected,编译器将拒绝带有error:notypenamed'type'in'std::result_of'的代码.如果它是公开的,它就可以工作,但我想知道从那以后我是否也可以让它为protected案例工作。这是重现错误的简单代码。#includeclassbase{protected:intoperator()(){return1;};};classchild:privatebase{autostaticdoSomeMethod()->typenamestd::result_
不可否认,这个问题的标题听起来与你的邻居迈克反复问的问题几乎一模一样。我发现很多问题的措辞相同,但没有一个是我的问题。首先,对于这个问题的上下文,我想澄清几点:1,c++访问控制是基于类而不是基于实例。因此,下面的代码是完全有效的。classBase{protected:intb_;public:boolIsEqual(constBase&another)const{returnanother.b_==b_;//accessanotherinstance'sprotectedmember}};2,我完全理解为什么以下代码无效-另一个可以是兄弟实例。classDerived:public
这是code:classTestA{protected:inttest=12;public:TestA(){couttest;}~TestB(){}};intmain(){TestA*pTestA=newTestA();TestB*pTestB=newTestB(pTestA);}我正在尝试使用指向TestA类型对象的指针访问protected成员(因此,TestA的实例).TestB也派生自TestA为什么我无法访问它?它只能在我需要它的类(class)“内部”访问吗?不在外部使用指针/直接声明? 最佳答案 当public继承自基
给定一个抽象接口(interface)和一个从该接口(interface)派生的实现,其中构造函数受到保护(只能从类工厂创建这些对象-以实现DI模式),我如何在工厂函数中使用make_shared?例如:classIInterface{public:virtualvoidMethod()=0;};classInterfaceImpl:publicIInterface{public:virtualvoidMethod(){}protected:InterfaceImpl(){}};std::shared_ptrCreate(){std::shared_ptrobject=std::mak
在VisualC++中,我可以这样做:templateclassA{protected:Ti;};templateclassB:publicA{Tgeti(){returni;}};如果我尝试用g++编译它,我会得到一个错误。我必须这样做:templateclassB:publicA{Tgeti(){returnA::i;}};难道我不应该在标准C++中做前者吗?还是gcc配置错误导致出现错误? 最佳答案 这过去是允许的,但在gcc3.4中发生了变化.在模板定义中,非限定名称将不再查找依赖基的成员(如C++标准中的[temp.dep
#includeusingnamespacestd;classBase{public:Base(){cout当我执行上面的示例程序时,出现以下错误:protected.cpp:在函数“intmain(int,char**)”中:protected.cpp:26:错误:‘Base’是‘Derived’不可访问的基础为什么不能用基指针创建派生对象????所以我可以创建一个派生类的实例,例如DeriveddDerivedd1=newDerived;但是像这样从基类指针创建实例Base*b=newderived会失败。这是因为Derived在派生过程和私有(private)时实际上不是Base
我有一个基类,比如说BassClass,它有一些字段,我让它们受到保护,还有一些纯虚函数。然后是派生类,例如DerivedClass,例如classDerivedClass:publicBassClass。DerivedClass不应该继承BassClass的protected字段吗?当我尝试编译DerivedClass时,编译器提示DerivedClass没有任何这些字段,这里有什么问题?谢谢 最佳答案 如果BassClass(sic)和DerivedClass是模板,并且要从DerivedClass访问的BassClass成员>