pure-virtual相关内容
我是一个学习C++的学生。我正在为我的程序创建涉及继承和抽象/具体类的UML类关系图,但我不太确定如何表示纯虚拟函数。感谢您的任何帮助,谢谢! UMLUML 标准确实指出,行为特性(例如,方法/操作)可以将其属性isAbstract设置为指示它是抽象的,并且没有实现。isAbstract 推荐答案 但是,没有说明应如何在图表中显示此内容。 根据uml-diagrams.o
..
..
我明白为什么会发生这种情况,但我一直在尝试解决它...这是我的代码在我的程序退出时生成错误(因此导致崩溃)时所做的事情... 调用的纯虚方法 SomeClass::~SomeClass(){BaseClassObject->SomePureVirtualMethod(this);} void DerivedClass::SomePureVirtualMethod(SomeClass* o
..
我有时会注意到程序在我的计算机上崩溃并显示错误:“纯虚函数调用". 当无法从抽象类创建对象时,这些程序如何编译? 解决方案 如果您尝试从构造函数或析构函数调用虚函数,可能会导致这些问题.由于您不能从构造函数或析构函数调用虚函数(派生类对象尚未构造或已被销毁),因此它调用基类版本,在纯虚函数的情况下,不会'不存在. (查看现场演示这里) 类基础{上市:基地(){做它();}//
..
..
我想去那里.说真的,如何以“Apple"方式实现纯虚拟方法?您是否在基类中使用协议并在这些方法上抛出异常? 解决方案 当你在 Objective-C 中编程时,你需要清除虚拟方法之类的东西.您不会在 Objective-C 对象上调用方法,而是向它们发送消息.对象要么响应消息,要么不响应消息,但由于动态绑定,您直到运行时才能知道这一点. 因此,您可以在基础对象上声明一个方法而不提供实
..
纯虚函数和虚函数有什么区别? 我知道“纯虚函数是一个没有实体的虚函数",但这意味着什么以及下面这行实际做了什么: virtual void virtualfunctioname() = 0 解决方案 虚函数使其类成为多态基类.派生类可以覆盖虚函数.通过基类指针/引用调用的虚拟函数将在运行时解析.也就是说,使用对象的动态类型而不是它的静态类型: 派生 d;基地&rb = d;//如果
..
假设我们有一个继承自两个基类的类(多重继承).基class A是抽象的,声明了一个纯虚函数foo,另一个基class B声明并实现了一个函数foo完全相同的签名. 结构体A{虚拟无效 foo(int i) = 0;};结构体B{虚拟无效 foo(int i) {}};结构 C : 公共 A, 公共 B {}; 我想在派生的class C 中使用基础class B 的foo 实现.但是,如果我没
..
以下代码可在各种 gcc 和 clang 版本上编译 - 当使用 gcc 5.3.1 编译和运行时,它会打印 A() 然后以纯虚调用错误中止. #include A级{民众:一种() {printf("A()\n");}虚拟无效 b() const = 0;};int main(){const A&一种{};a.b();返回0;} 我意识到将引用绑定到临时对象并不理想(尽管我认为这
..
在 GCC 上编译时,我收到 error: pure-specifier on function-definition,但在我使用 VS2005 编译相同的代码时却没有. class Dummy {//错误:函数定义上的纯说明符,VS2005编译虚拟无效进程()= 0 {};}; 但是当这个纯虚函数的定义不是内联时,它是有效的: class Dummy{虚拟无效进程()= 0;};void
..
我有一个基类 class ShapeF{民众:形状F();虚拟 ~ShapeF();内联无效 SetPosition(const Vector2& inPosition) { mPosition.Set(inPosition);}受保护:Vector2 mPosition;} 显然有一些省略的代码,但你明白了.我使用它作为模板,并通过一些有趣的(省略)枚举来确定我正在使用的形状类型 clas
..
我有一个包含纯虚函数的基类 MyBase: void PrintStartMessage() = 0 我希望每个派生类都在它们的构造函数中调用它 然后我把它放在基类(MyBase)构造函数中 类 MyBase{民众:虚拟无效 PrintStartMessage() =0;我的基地(){打印开始消息();}};派生类:公共 MyBase{民众:void PrintStartMe
..
我们总是将纯虚函数声明为: virtual void fun() = 0 ; 即,它总是被赋值为 0. 我的理解是,这是为了将此函数的 vtable 条目初始化为 NULL,而此处的任何其他值都会导致编译时错误.这种理解正确与否? 解决方案 使用 =0 的原因是 Bjarne Stroustrup 认为他无法获得另一个关键字,例如“pure";在实现该功能时通过了 C++ 社区.
..
如何设置代表接口的类?这只是一个抽象基类吗? 解决方案 通过 bradtgmurray,您可能希望通过添加一个虚析构函数来为接口的纯虚方法列表做一个例外.这允许您将指针所有权传递给另一方,而无需公开具体的派生类.析构函数不需要做任何事情,因为接口没有任何具体的成员.将函数定义为虚拟函数和内联函数似乎有些矛盾,但相信我 - 事实并非如此. class IDemo{民众:虚拟 ~IDemo(
..
我正在做一个练习,该练习要求我选取一个 Rodent 基类并使其成为一个纯抽象类.我对纯抽象类的理解是它充当接口并且只包含纯虚函数.虽然这是一个简单的练习,但我对本书提供的解决方案有疑问: 类啮齿类动物{民众:虚拟 ~Rodent() {cout
..
我正在开发 C++ 程序,但在使用克隆时遇到多重继承问题.问题(以简化形式)如下. 我希望能够克隆从类 Base 派生的所有对象. class Base{民众:virtual Base* clone()const=0;}; 我想定义另外两个从 Base 派生的类,它们都是抽象的,即我不能定义 clone 函数,但我必须以某种方式声明它们(我想确保,如果我克隆 Derived*,我将返回
..
我有以下类,Base 和 Derived,当我编译时,编译器抱怨它无法创建 DLog 的实例,因为它是抽象的. 谁能告诉我如何解决这个错误? 我猜这是因为不是两个纯虚函数都没有在 Derived 中实现. 类记录器{民众:virtual void log(int debugLevel, char* fmt, ...) = 0;virtual void log(string logTe
..
问题是:我在尝试编译时不断收到未实现的纯虚方法错误.我已经在抽象基类中实现了所有的纯虚方法.有什么想法吗? 这里是抽象基类: 班级记录{民众:虚拟 int getID()=0;虚拟记录 *clone();}; 和实现: class sdata:公共记录{民众:sdata(std::string s = ""){data=s;ID=atoi(data.substr(0,8).c_str(
..
假设我们有一个继承自两个基类的类(多重继承).基class A是抽象的,声明了一个纯虚函数foo,另一个基class B声明并实现了一个函数foo完全相同的签名. 结构体A{虚拟无效 foo(int i) = 0;};结构体B{虚拟无效 foo(int i) {}};结构 C : 公共 A, 公共 B {}; 我想在派生的class C 中使用基础class B 的foo 实现.但是,如果我没
..
以下代码可在各种 gcc 和 clang 版本上编译 - 当使用 gcc 5.3.1 编译和运行时,它会打印 A() 然后以纯虚调用错误中止. #include A级{民众:一种() {printf("A()\n");}虚拟无效 b() const = 0;};int main(){const A&一种{};a.b();返回0;} 我意识到将引用绑定到临时对象并不理想(尽管我认为这
..