草庐IT

protected_class_method

全部标签

c# - 父类(super class)构造函数中的虚拟化

我认为根据OOP的设计,虚拟化在父类(superclass)构造函数中不起作用。例如,考虑以下C#代码。usingSystem;namespaceProblem{publicclassBaseClass{publicBaseClass(){Console.WriteLine("Hello,World!");this.PrintRandom();}publicvirtualvoidPrintRandom(){Console.WriteLine("0");}}publicclassDescendent:BaseClass{privateRandomrandomValue;publicDes

C++:允许访问 protected 类成员而不是私有(private)成员

我知道您可以通过继承来做到这一点,但您应该在"is"情况下使用继承。我也知道有friend,但他们也允许访问私有(private)成员。有什么方法可以做到这一点(允许访问protected类成员而不是私有(private)成员)?为了改写这个问题,我有第1类和第2类。我希望第2类可以访问第1类的protected和公共(public)成员,但不能访问它的私有(private)成员。我该怎么做? 最佳答案 它并不优雅,但这可能适合你:classB;classA{protected:intx;private:inty;};classA_

c++ - "virtual base class in the case of multilevel inheritance"有意义吗

考虑以下显示多级继承的示例代码:案例1:这里类derived1是通过虚拟继承从类base派生的,类derived2是从类派生的直接类derived1。classbase{};classderived1:virtualpublicbase{};classderived2:publicderived1{};Case2:与Case1相同,只是不涉及虚拟继承classbase{};classderived1:publicbase//novirtualinheritance{};classderived2:publicderived1{};假设我在这两种情况下都创建了derived2类的对象。C

c++ - 对父类(super class)的引用

我想结合智能指针使用访问者模式,但编译器似乎无法检测子类并匹配适当的函数。我写了一个SSCE来说明问题:测试.hpp:classVisitor;classArea{public:virtualvoidvisit(constVisitor&visitor)=0;};classArea1:publicArea{public:virtualvoidvisit(constVisitor&visitor);};classArea2:publicArea{public:virtualvoidvisit(constVisitor&visitor);};classVisitor{public:virt

c++ - 如何在 C++ 模板类之间共享 protected 成员?

考虑以下示例:class_ref{public:_ref(){}_ref(const_ref&that){}virtual~_ref()=0;};_ref::~_ref(){}templateclassref:public_ref{protected:ref(const_ref&that){}public:ref(){}ref(constref&that){}virtual~ref(){}templatereftryCast(){boolvalid;//performsomechecktomakesuretheconversionisvalidif(valid)returnref(*t

c++ - SFINAE 优雅地检查 "template template class"(在模板参数中)

如何在模板参数中检查模板模板类的类型?例子B和C是模板类。我想创建一个类D那可以是D或D.只有D有D::f().这是我的解决方法(demo)。它有效。#includeusingnamespacestd;classDummy{};templateclassB{};templateclassC{};templateclassBC>classD{//f()isinstantiatedonlyif"BC"=="B"public:template>statictypenamestd::enable_if>::value,void>::typef(){}//^#1};intmain(){D::f(

c++ - 为什么纯虚拟/抽象类需要构造函数,特别是对于 protected const 成员变量?

我有一个这样定义的纯虚拟类:classBaseClass{protected:constintvar;public:voidsomefun()=0;//whatImeanbyapurelyvirtualclass//stuff...};如果我不添加这样定义的构造函数:BaseClass(constint&VAR):var(VAR){};我必须随后在派生类中使用,我的派生类无法将const变量var初始化为它想要的任何值。现在我真的明白这里发生了什么。在构造派生类之前,会调用基类的构造函数,此时必须初始化const成员变量。我的问题不是“我如何使我的代码工作”之类的问题,这已经完成了。我

C++ 链接成员函数使用 .chain().method() 与 ->chained(0->method()

问题的简短版本我就是否使用./*this与->/this寻求建议,即C++(*this).chained().methods()与this->chained()->methods()。顺便说一句,目前我看到的大部分页面都推荐[[C++(*this).chained().methods()]].我只是想知道,因为你做不到My_Classobject.chained().methods();(顺便说一句,我没有测试第一部分中的示例。我在第二部分中提供了测试示例。)你必须做My_Classobject;object.chained().methods();这是一个恼人的额外行或者你可以做My

C++ 从父类(super class)调用子类方法

我有以下风格的代码:classSubClass;classSuperClass;classSuperClass{private:voidbar(){SubClass().foo();}};classSubClass:SuperClass{public:voidfoo(){};};所以基本上我有一个父类(superclass),我想从中调用子类的方法foo()。VS2012给我以下错误:错误1​​errorC2514:'SubClass':类没有构造函数。错误2errorC2228:'.foo'的左侧必须有类/结构/union。我想做的事情的正确结构是什么?

c++ - 将 QUrl 传递给 QNetworkRequest 构造函数会导致 "non-class type"编译器错误

当我将QUrl传递给QNetworkRequest构造函数时,我从编译器中得到了奇怪的错误。更奇怪的是它只发生在特定的情况下,举个例子:#include#includeintmain(intargc,char*argv[]){QCoreApplicationa(argc,argv);QStringstr;QNetworkRequestreq(QUrl(str));req.setUrl(QUrl(str));//error:requestformember'setUrl'in'req',whichisofnon-classtype'QNetworkRequest()(QUrl)'QNet