草庐IT

c++ - 当作为参数传递时,为什么不能在子类函数中访问 protected 父类(super class)成员?

我收到一个编译错误,对此我有些困惑。这是在VS2003上。错误C2248:“A::y”:无法访问在“A”类中声明的protected成员classA{public:A():x(0),y(0){}protected:intx;inty;};classB:publicA{public:B():A(),z(0){}B(constA&item):A(),z(1){x=item.y;}private:intz;};问题在于x=item.y;访问被指定为protected。为什么B类的构造函数不能访问A::y? 最佳答案 因为这个:classb

c++ - 有没有办法禁止我的类的子类化?

假设我有一个名为“Base”的类,以及一个名为“Derived”的类,它是Base的子类,可以访问Base的protected方法和成员。我现在要做的就是让它没有其他类可以继承Derived。在Java中,我可以通过将Derived类声明为“final”来实现这一点。有什么C++技巧可以给我同样的效果吗?(理想情况下,我想让除Derived之外的任何类都不能继承Base。我不能只将所有代码放入同一个类或使用friend关键字,因为Base和Derived都是模板化,Base的模板参数比Derived少....) 最佳答案 从C++1

c++ - 有没有办法禁止我的类的子类化?

假设我有一个名为“Base”的类,以及一个名为“Derived”的类,它是Base的子类,可以访问Base的protected方法和成员。我现在要做的就是让它没有其他类可以继承Derived。在Java中,我可以通过将Derived类声明为“final”来实现这一点。有什么C++技巧可以给我同样的效果吗?(理想情况下,我想让除Derived之外的任何类都不能继承Base。我不能只将所有代码放入同一个类或使用friend关键字,因为Base和Derived都是模板化,Base的模板参数比Derived少....) 最佳答案 从C++1

c++ - 子类化时覆盖静态变量

我有一个类,我们称它为A,在该类定义中我有以下内容:staticQPainterPath*path;也就是说,我声明了一个指向路径对象的静态(类范围)指针;此类的所有实例现在都将具有相同的共享数据成员。我希望能够以此类为基础,将其子类化为更专业的形式,分层行为,并且每个类都有自己独特的路径对象(但不必重复计算边界框或调用绘画例程等无聊的部分)。如果我对它进行子类化以创建一个类F(例如),我希望F使用从A继承的绘图例程,但要使用在F中声明的静态(类范围)路径对象。我尝试过上面的声明在私有(private)部分(并在派生类F中重复),并尝试将它放在protected部分中,所有这些都没有任

c++ - 子类化时覆盖静态变量

我有一个类,我们称它为A,在该类定义中我有以下内容:staticQPainterPath*path;也就是说,我声明了一个指向路径对象的静态(类范围)指针;此类的所有实例现在都将具有相同的共享数据成员。我希望能够以此类为基础,将其子类化为更专业的形式,分层行为,并且每个类都有自己独特的路径对象(但不必重复计算边界框或调用绘画例程等无聊的部分)。如果我对它进行子类化以创建一个类F(例如),我希望F使用从A继承的绘图例程,但要使用在F中声明的静态(类范围)路径对象。我尝试过上面的声明在私有(private)部分(并在派生类F中重复),并尝试将它放在protected部分中,所有这些都没有任

c++ - 从具有不同子类的父指针调用子方法

我有一个父类,其中有2个或更多子类派生自它。随着更多需求的提出,future不同子类的数量可能会增加,但它们都将遵循基类方案,并且将包含很少有自己独特的方法。让我举一个例子-#include#include#include#includeclassB{private:inta;intb;public:B(constint_a,constint_b):a(_a),b(_b){}virtualvoidtell(){std::cout>v;v.push_back(std::make_unique(1,2,"boom"));v.push_back(std::make_unique(1,2,44

c++ - 从具有不同子类的父指针调用子方法

我有一个父类,其中有2个或更多子类派生自它。随着更多需求的提出,future不同子类的数量可能会增加,但它们都将遵循基类方案,并且将包含很少有自己独特的方法。让我举一个例子-#include#include#include#includeclassB{private:inta;intb;public:B(constint_a,constint_b):a(_a),b(_b){}virtualvoidtell(){std::cout>v;v.push_back(std::make_unique(1,2,"boom"));v.push_back(std::make_unique(1,2,44

java - C++:使用抽象方法创建抽象类并覆盖子类中的方法

如何在C++中创建一个带有一些我想在子类中覆盖的抽象方法的抽象类?.h文件的外观应该如何?有没有.cpp,如果有,应该怎么看?在Java中它看起来像这样:abstractclassGameObject{publicabstractvoidupdate();publicabstractvoidpaint(Graphicsg);}classPlayerextendsGameObject{@Overridepublicvoidupdate(){//...}@Overridepublicvoidpaint(Graphicsg){//...}}//Inmygameloop:Listobjects

java - C++:使用抽象方法创建抽象类并覆盖子类中的方法

如何在C++中创建一个带有一些我想在子类中覆盖的抽象方法的抽象类?.h文件的外观应该如何?有没有.cpp,如果有,应该怎么看?在Java中它看起来像这样:abstractclassGameObject{publicabstractvoidupdate();publicabstractvoidpaint(Graphicsg);}classPlayerextendsGameObject{@Overridepublicvoidupdate(){//...}@Overridepublicvoidpaint(Graphicsg){//...}}//Inmygameloop:Listobjects

c++ - 避免复制子类中的所有构造函数

所以一个基类有多个构造函数:sf::Sprite()sf::Sprite(constTexture&texture)sf::Sprite(constTexture&texture,constIntRect&rectangle)而且我多次将这个类子类化:classSub:publicsf::Sprite{public:Sub():sf::Sprite(){};Sub(constTexture&texture):sf::Sprite(texture){};Sub(constTexture&texture,constIntRect&rectangle):sf::Sprite(texture,