-
181 votesanswersviews
虚函数与纯虚函数的区别[重复]
可能重复:C虚拟/纯虚拟解释 纯虚函数和虚函数有什么区别? 我知道“纯虚函数是一个没有正文的虚函数”,但这意味着什么,以及下面这一行实际完成的内容: virtual void virtualfunctioname() = 0 -
1 votesanswersviews
为什么在模板中使用纯虚函数尝试构建C代码时会出现链接器错误?
在我正在编写的应用程序中,我创建了一个带有纯虚函数的模板类,然后是另一个继承前者实例并实现虚函数的类 . 从父的构造函数调用虚函数,子构造函数也使用该构造函数 . 由于链接器错误,我无法构建此代码,我无法弄清楚原因 . 这是重现我遇到的问题的简化版代码 . template <typename T> class Foo { public: Foo(T a) { ... -
3 votesanswersviews
模板,内部结构,本地类型和纯虚函数,哦,我的
考虑一个示例,其中方法是纯虚拟的,采用模板化类型的参数(从外部类型注入),并且模板化类型是本地类型(在函数体中定义) . 此方案导致g下的编译时错误 . 不可否认,这是一个非常落后的案例,但它确实源于真实的代码 . 这是一个可编辑的,可重现的例子: #include <cstdio> template<typename T> struct Outer { stru... -
4 votesanswersviews
C:从同一个类的成员函数调用纯虚函数
考虑以下2个程序 . #include <iostream> using std::cout; class Base { public: virtual void f()=0; void g() { f(); } virtual ~Base() { } }; class Derived : ... -
32 votesanswersviews
从基类构造函数调用纯虚函数
我有一个包含纯虚函数的基类MyBase: void PrintStartMessage() = 0 我希望每个派生类在它们的构造函数中调用它 然后我把它放在基类( MyBase )构造函数中 class MyBase { public: virtual void PrintStartMessage() =0; MyBase() { P... -
6 votesanswersviews
纯虚函数重载
我通常使用纯虚函数来处理我的代码所需的那些方法 . 因此,我创建接口,然后其他用户实现其派生类 . 派生类只将这些虚函数作为公共函数,而一些其他方法应该作为私有实现,因为我的代码不会调用它们 . 我不知道这是否可以被认为是OOP的一个好习惯(有没有设计模式?) . 无论如何,我的问题是:用户可以重载纯虚函数吗? 即 class Base { public: Base(); virtual ~B... -
136 votesanswersviews
为什么我们需要在C中使用纯虚拟析构函数?
我理解虚拟析构函数的必要性 . 但为什么我们需要纯虚拟析构函数?在其中一篇C文章中,作者提到我们在创建类抽象时使用纯虚析构函数 . 但是我们可以通过将任何成员函数设置为纯虚拟来使类抽象化 . 所以我的问题是 我们什么时候才能真正使析构函数变为虚拟?任何人都能给出一个很好的实时例子吗? 当我们创建抽象类时,将析构函数设置为纯虚拟是一种很好的做法吗?如果是..那为什么? -
1 votesanswersviews
覆盖返回基本类型的函数
我有两节课 . 基类 Parent 和派生类 Child . 类 Parent 具有返回其类类型的纯虚函数 . 如何在派生类中覆盖它? class Parent { public: virtual Parent* OverrideMe(Parent* func) = 0; }; class Child : public Parent { public: ... -
748 votesanswersviews
你如何在C中声明一个接口?
如何设置代表接口的类?这只是一个抽象的基类吗? -
13 votesanswersviews
类中的纯虚析构函数定义会产生编译错误
基类中的 pure virtual destructor 应该有一个定义 . 否则编译器将在链接时生成从派生类析构函数调用基类析构函数,并将导致链接错误 . 我试图在基类中定义纯虚拟析构函数,如下所示: class base { public: base() { cout << "constructor in base clas... -
16 votesanswersviews
为什么从构造函数对纯虚函数的虚拟调用是UB,标准允许调用非纯虚函数?
从10.4 Abstract Classes parag . 标准中的6: “可以从抽象类的构造函数(或析构函数)调用成员函数;直接或间接地对从这样的构造函数(或析构函数)创建(或销毁)的对象进行纯虚函数的虚拟调用的效果未定义 . “ 假设标准允许从构造函数(或析构函数)调用非纯虚函数,为什么区别? [编辑]关于纯虚函数的更多标准引用: §10.4/ 2通过在类定义中的函数声明中使用纯说明符(...