簡體   English   中英

C ++中的虛函數聲明和繼承

[英]Virtual function declaration and inheritance in C++

我有一個程序試圖從基本抽象類創建派生類。 我的.h文件在這里。

#ifndef SHIP_H
#define SHIP_H
class Ship
{
  public:
    virtual ~Ship(void) {}
    virtual const char *name(void) const = 0;
    virtual int size(void) const = 0;
    int getX(int i) const;
    int getY(int i) const;
    void print(void) const;
    bool includes(int x, int y);
int level(void) const;
void decreaseLevel(void);
static Ship *makeShip(char ch, int x1, int y1, int x2, int y2);
  protected:
    void setPos(int a1, int b1, int a2, int b2);
    int lev;
  private:
    bool checkConfig(int x1, int y1, int x2, int y2);
    int x1,y1,x2,y2;
    };

class AircraftCarrier : public Ship
{
  public:
   AircraftCarrier(int x1, int y1, int x2, int y2);
   virtual const char *name(void) const;
   virtual int size(void) const;
};

在Ship.cpp文件中,我有:

const char *name (void) {

    const char * ret = "AircraftCarrier"; 
    return ret;
}

但是,這在我的派生類AircraftCarrier的特定范圍內未聲明。 但是,每當我添加

const char AircraftCarrier :: *name {...}

我收到一個錯誤:

Ship.cpp:46:9:錯誤:無法將'const char *'轉換為'const char AircraftCarrier :: *'返回return ret;

您要在Ship.cpp中聲明的函數的名稱為AircraftCarrier :: name(),並且該函數應根據頭文件中的聲明返回const char *。

const char *AircraftCarrier::name() {...}

這個定義:

const char *AircraftCarrier::name() {...}

是不正確的。 嘗試使用它,您將得到“找不到成員”的編譯錯誤。 您的聲明和定義必須具有相同的原型。 因此,如果您寫的是:

virtual const char *name(void) const;
        ^^^^^                  ^^^^^

.h中的聲明,那么您在.cpp中的定義必須與原型中的聲明完全匹配。 正確的定義是:

const char* AircraftCarrier::name() const 
{
    // your complex code here
}

它應該是:

const char* AircraftCarrier :: name {...}

*是返回類型規范的一部分,而不是函數名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM