草庐IT

protected

全部标签

c++ - 具有基于 protected 基类方法的返回类型的函数

我试图让doSomeMethod()的返回类型与operator()相同在基类中,但如果它被声明为protected,编译器将拒绝带有error:notypenamed'type'in'std::result_of'的代码.如果它是公开的,它就可以工作,但我想知道从那以后我是否也可以让它为protected案例工作。这是重现错误的简单代码。#includeclassbase{protected:intoperator()(){return1;};};classchild:privatebase{autostaticdoSomeMethod()->typenamestd::result_

C++ 保护 : fail to access base's protected member from within derived class

不可否认,这个问题的标题听起来与你的邻居迈克反复问的问题几乎一模一样。我发现很多问题的措辞相同,但没有一个是我的问题。首先,对于这个问题的上下文,我想澄清几点:1,c++访问控制是基于类而不是基于实例。因此,下面的代码是完全有效的。classBase{protected:intb_;public:boolIsEqual(constBase&another)const{returnanother.b_==b_;//accessanotherinstance'sprotectedmember}};2,我完全理解为什么以下代码无效-另一个可以是兄弟实例。classDerived:public

c++ - 为什么派生类不能通过指向基类的指针访问其基类的 protected 成员?

这是code:classTestA{protected:inttest=12;public:TestA(){couttest;}~TestB(){}};intmain(){TestA*pTestA=newTestA();TestB*pTestB=newTestB(pTestA);}我正在尝试使用指向TestA类型对象的指针访问protected成员(因此,TestA的实例).TestB也派生自TestA为什么我无法访问它?它只能在我需要它的类(class)“内部”访问吗?不在外部使用指针/直接声明? 最佳答案 当public继承自基

c++ - 你能在 C++ 中保护嵌套类吗?

我有一个类,只有特定类层次结构中的类才真正需要它。我想知道是否可以将类嵌套在最高类的保护部分,让所有其他类自动继承它? 最佳答案 “继承”这个词用错了,因为它在C++中有一个非常具体的定义,您不是这个意思,但是是的,您可以这样做。这是合法的:classA{protected:classNested{};};classB:publicA{private:Nestedn;};并且不在A中的代码或派生自A的代码无法访问或实例化A::Nested。 关于c++-你能在C++中保护嵌套类吗?,我们

c++ - 将 make_shared 与 protected 构造函数 + 抽象接口(interface)一起使用

给定一个抽象接口(interface)和一个从该接口(interface)派生的实现,其中构造函数受到保护(只能从类工厂创建这些对象-以实现DI模式),我如何在工厂函数中使用make_shared?例如:classIInterface{public:virtualvoidMethod()=0;};classInterfaceImpl:publicIInterface{public:virtualvoidMethod(){}protected:InterfaceImpl(){}};std::shared_ptrCreate(){std::shared_ptrobject=std::mak

c++ - 从子类 : gcc vs msvc 访问 protected 成员

在VisualC++中,我可以这样做:templateclassA{protected:Ti;};templateclassB:publicA{Tgeti(){returni;}};如果我尝试用g++编译它,我会得到一个错误。我必须这样做:templateclassB:publicA{Tgeti(){returnA::i;}};难道我不应该在标准C++中做前者吗?还是gcc配置错误导致出现错误? 最佳答案 这过去是允许的,但在gcc3.4中发生了变化.在模板定义中,非限定名称将不再查找依赖基的成员(如C++标准中的[temp.dep

c++ - protected 派生类

#includeusingnamespacestd;classBase{public:Base(){cout当我执行上面的示例程序时,出现以下错误:protected.cpp:在函数“intmain(int,char**)”中:protected.cpp:26:错误:‘Base’是‘Derived’不可访问的基础为什么不能用基指针创建派生对象????所以我可以创建一个派生类的实例,例如DeriveddDerivedd1=newDerived;但是像这样从基类指针创建实例Base*b=newderived会失败。这是因为Derived在派生过程和私有(private)时实际上不是Base

c++ - c++基类中 protected 字段的问题

我有一个基类,比如说BassClass,它有一些字段,我让它们受到保护,还有一些纯虚函数。然后是派生类,例如DerivedClass,例如classDerivedClass:publicBassClass。DerivedClass不应该继承BassClass的protected字段吗?当我尝试编译DerivedClass时,编译器提示DerivedClass没有任何这些字段,这里有什么问题?谢谢 最佳答案 如果BassClass(sic)和DerivedClass是模板,并且要从DerivedClass访问的BassClass成员>

c++ - 奇怪的编译器错误和模板继承

谁能解释一下为什么这段代码:classsafe_bool_base{//13protected:typedefvoid(safe_bool_base::*bool_type)()const;voidthis_type_does_not_support_comparisons()const{}//18safe_bool_base(){}safe_bool_base(constsafe_bool_base&){}safe_bool_base&operator=(constsafe_bool_base&){return*this;}~safe_bool_base(){}};templatec

c++ - 一个方法不能访问同一个类的成员变量(C++)

我为我的学校项目编写了一个简短的程序来说明继承的原则,但我遇到了一个奇怪的问题。这是我的代码:(我省略了所有不是问题的代码)classCar{protected:doublefuelLevel;public:voidfuelUp(double);};voidfuelUp(doublefuel){Car::fuelLevel+=fuel;}这是构建日志:||===Build:DebuginwierdError(compiler:GNUGCCCompiler)===|||Infunction'voidfuelUp(double)':||4|error:'doubleCar::fuelLev