相关疑难解决方法(0)

C++纯虚函数有体

纯虚函数(当我们设置时= 0)也可以有一个函数体.

如果它们根本不被调用,那么为纯虚函数提供函数体有什么用呢?

c++ pure-virtual

62
推荐指数
3
解决办法
3万
查看次数

纯虚拟和内联定义

考虑:

struct device{
    virtual void switchon() = 0 {}
};

int main()
{

}
Run Code Online (Sandbox Code Playgroud)

我写了类似于以下的代码,它给出了一个错误:

函数定义编译的纯指定符因-Wfatal-errors而终止.

当我问他时,他向我展示了标准中的以下引用:

在类中声明的虚函数应在该类中定义或声明为纯(10.4),或两者兼有; 但不需要诊断(3.2).

我似乎无法理解这意味着什么,我认为这在某种程度上是不相关的.

PS:如果这不是相关的引用,请引导我到正确的引用,以便我可以有更好的反驳.

c++

8
推荐指数
1
解决办法
1585
查看次数

C++重写基类本身的Base类的抽象方法?

如果我有一个基类:

class Base {
    public:
        Base(){}
        virtual void foo()=0;
};
Run Code Online (Sandbox Code Playgroud)

现在如果我从Base类中派生出任何类,它将不得不重写foo().

如果我也希望foo()Base类的行为怎么办?所以基类有它自己的foo,最重要的是,它的每一个都必须覆盖foo?那可能吗?

c++ abstract-class overriding class derived-class

4
推荐指数
1
解决办法
6127
查看次数

使用std :: thread从派生类调用overriden方法

我想尝试这样的事情:

int main()
{
    class Base
    {
    public:
        Base() = default;
        virtual void print() = 0;
        void CallThread()
        {
            std::thread(&Base::print, *this);
        };
    };

    class derived1 : public Base
    {
    public:
        derived1() = default;
        void print() { printf("this is derived1\n"); }

    };
    class derived2 : public Base
    {
    public:
        derived2() = default;
        void print() { printf("this is derived2\n"); }

    };
    Base* ptr;
    ptr = new derived1();
    ptr->CallThread();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想要的结果是:

这是派生的1.

问题是它甚至不会编译.我正在使用VisualStudio 2013.

错误是:

错误2错误C3640:'main :: Base :: [thunk]:__ thiscall …

c++ polymorphism c++11

3
推荐指数
1
解决办法
704
查看次数

c ++ Clion和VS2019中的纯虚拟析构函数

我正在尝试声明纯虚拟析构函数,在VS2019中我这样写:

    virtual ~A() = 0 {};
Run Code Online (Sandbox Code Playgroud)

很好,但是在Clion中,我接受了以下消息:

函数定义虚拟的纯说明符〜A()= 0 {};

并且迫使我为该函数编写不同的实现(不是给它带来很多麻烦,而是我想知道为什么会这样)

c++ virtual-functions pure-virtual visual-c++ clion

3
推荐指数
1
解决办法
62
查看次数