相关疑难解决方法(0)

虚函数和纯虚函数之间的区别

可能重复:
C++ Virtual/Pure Virtual Explained

纯虚函数和虚函数有什么区别?

我知道"纯虚函数是一个没有正文的虚函数",但这意味着什么,以及下面这一行实际完成的内容:

virtual void virtualfunctioname() = 0
Run Code Online (Sandbox Code Playgroud)

c++ function pure-virtual

202
推荐指数
4
解决办法
37万
查看次数

覆盖非虚方法

让我们假设Visual C++ 2010中的这种情况:

#include <iostream>
#include <conio.h>

using namespace std;

class Base
{
public:
    int b;
    void Display()
    {
        cout<<"Base: Non-virtual display."<<endl;
    };
    virtual void vDisplay()
    {
        cout<<"Base: Virtual display."<<endl;
    };
};

class Derived : public Base
{
public:
    int d;
    void Display()
    {
        cout<<"Derived: Non-virtual display."<<endl;
    };
    virtual void vDisplay()
    {
        cout<<"Derived: Virtual display."<<endl;
    };
};

int main()
{
    Base ba;
    Derived de;

    ba.Display();
    ba.vDisplay();
    de.Display();
    de.vDisplay();

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

从理论上讲,这个小应用程序的输出应该是:

  • 基础:非虚拟显示.
  • 基地:虚拟展示.
  • 基础:非虚拟显示.
  • 衍生:虚拟显示.

因为Base类的Display方法不是虚方法,所以Derived类不能覆盖它.对?

问题是,当我运行应用程序时,它会打印出:

  • 基础:非虚拟显示. …

c++ overriding

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

重写方法时虚拟关键字的含义是什么?

重写方法时关键字virtual会做什么?我没有使用它,一切正常.

在这方面,每个编译器的行为是否相同?

我应该使用它吗?

c++ virtual-functions

12
推荐指数
3
解决办法
8627
查看次数

C++与virtual = 0的区别; 和空功能

我现在正在学习C++,OO方面,我总是这样做:

class SomeClass{
   virtual void aMethod()=0;
}

class AnotherClass{
   void anotherMethod(){/*Empty*/}
}

class SomeClassSon : public SomeClass{
   void aMethod(){/*Also Empty*/}
}
Run Code Online (Sandbox Code Playgroud)

我的疑问是:3种方法之间有什么区别.虚拟等于零,空虚,虚拟,因为它是继承的,空的.

为什么我不能像父亲一样制作SomeClassSon方法?(虚拟空白等于零?)

c++ oop methods class

9
推荐指数
2
解决办法
6147
查看次数

将虚函数声明设置为零?

可能重复:
为什么纯虚函数初始化为0?

在C++中,将函数声明设置为零意味着什么?我猜它与虚函数有关,而不是在这个类中实际定义的.在我正在阅读的代码头文件中找到:

virtual void SetValue(double val)=0;
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

c++ oop

6
推荐指数
2
解决办法
6970
查看次数

从抽象基类实现纯虚函数:重写说明符有什么意义吗?

背景

我只是偶然发现了一个override说明符的用例,据我所知,它似乎是多余的,也没有任何特定的语义含义,但也许我错过了一些东西,因此这个问题.在继续之前,我应该指出,我试图在这里找到答案,但最接近我得到的是以下主题,而不是真正回答我的问题(也许有人可以指出一个问答实际上已经回答了我的问题)题).

考虑以下抽象类:

struct Abstract {
  virtual ~Abstract() {};
  virtual void foo() = 0;
};
Run Code Online (Sandbox Code Playgroud)

在直接派生的非抽象类中override实现时foo(),有没有理由使用说明符Abstract(DerivedB如下所示)?即,当foo()派生类已经需要实现非抽象(并没有真正覆盖任何东西)时?

/* "common" derived class implementation, in my personal experience
   (include virtual keyword for semantics) */
struct DerivedA : public Abstract {
  virtual void foo() { std::cout << "A foo" << std::endl; }
};

/* is there any reason for having the override specifier here? */
struct DerivedB : …
Run Code Online (Sandbox Code Playgroud)

c++

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

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

Qt 5中构造函数的C++抽象类错误

我正在创建一个名为Asset的简单抽象类,标题代码如下所示:

#ifndef ASSET_H
#define ASSET_H

#include <QString>
#include <QDate>

class Asset
{  
public:
    Asset(QString des, QDate dat);
    ~Asset();
    virtual QString toString();
    virtual double value();
    QString getDescription();

private:
    QString description;

protected:
    QDate date;
};

#endif // ASSET_H
Run Code Online (Sandbox Code Playgroud)

这是我的实现文件的样子:

#include "asset.h"

Asset::Asset(QString des, QDate dat)
{
    description = des;
    date = dat;
}

QString Asset::getDescription()
{
    return description;
}
Run Code Online (Sandbox Code Playgroud)

我在实现构造函数上得到的错误代码是: undefined reference to vtable for Asset

我在这做错了什么?

c++ constructor abstract-class qt5

2
推荐指数
1
解决办法
245
查看次数

抽象类的继承

我有一个抽象的基类.我从抽象基础继承了一个新类,我无法实例化一个对象.编译器告诉的原因是

cannot allocate an object of abstract type

有没有办法克服这个问题.

c++ inheritance

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

C++类型检查错误

我按照上一篇文章中的说明重新编写了代码.

我的头文件

#include <iostream>
#include <string>
#include <vector>
#include <cstdio>
#include <typeinfo>
#include "Tour.h"
#include "GuidedTour.h"

using namespace std;
class TourManager {

private:
    vector<Tour *> tours;
    void setupTour();
    string getUserInput();
    string displayMainMenu();
    void displayTourDetails();
    void callDisplayOnEach();
    void addBookingsToTour();

public:
    TourManager();
    void go();
};
Run Code Online (Sandbox Code Playgroud)

然后我有一个函数用tour和guidedTour对象填充"list"向量.

void TourManager::setupTour() {

    tours.push_back(new Tour("FP001", "Fun Park 3 Day Pass", 110.00));
    tours.push_back(new GuidedTour("SK003", "Learn to Ski Adventure Tour", 240.00, "28/07
}

void TourManager::callDisplayOnEach() {

    for (vector<Tour *>::iterator it = tours.begin() ; it != tours.end(); ++it) 
    { …
Run Code Online (Sandbox Code Playgroud)

c++ types c++98

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

在父类的Update方法中添加东西

我有两个班级:

class Object {
public: void Update();
};

class Cube : public Object {
void Update();
};
Run Code Online (Sandbox Code Playgroud)

我想要一个 Update() 方法来完成我告诉它的所有事情,然后完成来自父类的 Update 所做的所有事情。我可以这样做吗?

c++ class parent-child

0
推荐指数
1
解决办法
452
查看次数

未定义的对象错误引用

#include <iostream>
#include <string>
using namespace std;

class Part{
public:
    std::string spec;
    Part(std::string str){
        this->spec = str;
    }
    std::string getSpec(){
        return spec;
    }
};

class Car{
public:
    Part getEngine();
    Part getWheels();
    Part getBody();
};


class Benz:public Car{
public:
    Part getEngine(){
        return Part("Benz Engine");
    }   
    Part getWheels(){
        return Part("Benz Wheels");
    }
    Part getBody(){
        return Part("Benz Body");
    }
};

class Audi:public Car{
public:
    Part getEngine(){
        return Part("Audi Engine");
    }   
    Part getWheels(){
        return Part("Audi Wheels");
    }
    Part getBody(){
        return Part("Audi Body");
    }
}; …
Run Code Online (Sandbox Code Playgroud)

c++ oop abstract-class class

0
推荐指数
2
解决办法
764
查看次数

什么使Enter()= 0; 在C#中意味着什么?

当我看到虚拟虚空enter()= 0时,我正在读书。赋值不是变量时该怎么办?

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

c# variable-assignment void

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