草庐IT

msf会话派生cs

全部标签

c++ - 根据参数在基类中创建派生类

我的问题或多或少与Needadesignpatterntoremoveenumsandswitchstatementinobjectcreation中的问题相同但是,我认为抽象工厂模式不适合这里。我目前正在计划重构/重新实现一些现有的DAL/ORM混合库。在现有代码的某处,有如下所示的代码:classBase{staticBase*create(structDatabasevaluesdbValues){switch(dbValues.ObjectType){casetypeA:returnnewDerivedA(dbValues);break;casetypeB:returnnewD

java - 访问派生类对象的字段,C++ vs Java

如果在将此对象分配给java中的基类类型的变量后访问派生类对象的字段,我会得到预期的行为,这意味着打印字段的派生类的值。在c++中打印属于基类的字段值。在Java中,6按预期打印:classIdeone{staticclassA{staticinta=7;}staticclassBextendsA{staticintb=6;}publicstaticvoidmain(String[]args)throwsjava.lang.Exception{Aa=newB();System.out.println(((B)a).b);}}在C++中,打印7:#includeusingnamespac

c++ - 从派生类调用时推断 'this' 指针类型?

我在基类中有一个方法需要传递给它的类型以进行一些与类型相关的操作(查找、大小和一些方法调用)。目前它看起来像这样:classbase{templatevoidBindType(T*t);//dosomethingwiththetype};classderived:publicbase{voidfoo(){do_some_workBindType(this);}};classderivedOther:publicbase{voidbar(){do_different_work...BindType(this);}};但是,我想知道是否有一种方法可以获取调用者的类型而不必传递它,以便我的调

c++ - 派生类销毁期间纯虚函数的范围 - 在 C++ 中

在派生类对象的析构过程中,我首先命中派生类析构函数,然后是基类析构函数(这是预期的)。但我很想知道-派生类的函数在什么时候超出范围(被破坏)。它是否在控件离开派生类析构函数并走向基类时立即发生?还是在我们完成基类析构函数后它也会发生。谢谢 最佳答案 一旦最派生类的析构函数完成,对象的动态类型就可以被认为是下一个派生类较少的类型。也就是说,在基类析构函数中调用虚方法会发现那个时间点的最终重写器处于基类。(构造时则相反)structbase{base(){std::couttype() 关于

c++ - 隐藏在派生类中的成员函数

请看下面的代码:#includeusingnamespacestd;classA{public:A(){};virtualvoidfoo(doubled){cout编译器(尝试过g++和visualc++2008)说没有像B:foo(double)这样的函数。g++的确切信息是:main.cpp:21:error:nomatchingfunctionforcallto‘B::foo(double)’看起来像hidingrule的效果,但我认为不应在此处使用该规则,因为我没有覆盖foo(double)并且两个foo方法都在基类中定义。我知道我可以解决这个问题usingA::foo;派生类

c++ - 如果基类析构函数是虚拟的,是否需要派生类析构函数定义?

我正在尝试以下示例:classbase//baseclass{public:std::listvalues;base(){}voidinitialize(base*b){values.push_front(b);}virtual~base(){values.clear();coutinitialize(static_cast(d));/*fillinglist*/deleteb;return0;}Q.1)为什么派生类的析构函数没有被调用,因为在基类析构函数中我正在执行values.clear()?Q.2)如果基类析构函数是虚拟的,是否需要派生类析构函数定义?

c++ - 检查派生类的类型

在我的程序中,我有一个名为Entity的类。另一个类Invader继承了Entity。因为我想要4种不同的入侵者,所以我声明了继承自Invader的类Invader1、Invader2、Invader3和Invader4。现在我声明一个实体指针类型vector来存储所有入侵者,例如:entities.push_back(newInvader4());entities.push_back(newInvader3());entities.push_back(newInvader2());entities.push_back(newInvader1());entities.push_back

c++ - 为什么 virtual 关键字会增加派生类的大小?

我有两个类-一个基类和一个派生类:classbase{inti;public:virtual~base(){}};classderived:virtualpublicbase{intj;};main(){cout这里的答案是16。但是如果我改为非虚拟公共(public)继承或使基类成为非多态的,那么我得到的答案是12,即如果我这样做:classbase{inti;public:virtual~base(){}};classderived:publicbase{intj;};main(){cout或classbase{inti;public:~base(){}};classderived

c++ - C++通过基类指针访问派生类成员

有没有办法让通用代码通过基类指针访问派生类的成员?或者还有其他解决方法吗?假设我有一个Shape类。我有继承它的Square和Triangle类。两者都有自己的私有(private)成员,彼此无关,因此将它们放在基类中毫无意义。现在,如果我需要将类写入文件,但直到我需要将类写入文件时才知道该类是方形还是三角形怎么办?我一直在想办法解决这个问题。最坏的解决方案是将Square和Triangle的数据写入一个文件,为读取和写入添加一个标识符(Triangle或Square),并在加载数据时让一个小型解析器将类放在一起。这将是低效和浪费时间的。我想知道是否有一些技巧或设计模式或任何可以帮助解

c++ - 一个基类只有一个派生类可以吗?

我正在使用OOD和设计模式创建密码模块。该模块将保留可记录事件的日志并读取/写入文件。我在基类中创建了接口(interface),在派生类中创建了实现。现在我想知道如果一个基类只有一个派生类,这是否有点难闻。这种类层次结构是不必要的吗?现在为了消除类层次结构,我当然可以只在一个类中做所有事情而根本不派生,这是我的代码。classCLogFile{public:CLogFile(void);virtual~CLogFile(void);virtualvoidRead(CStringstrLog)=0;virtualvoidWrite(CStringstrNewMsg)=0;};派生类是: