-7
#include <iostream>
using namespace std;

class Vehicule {
public:
    void affiche() const {
        cout << "Ceci est un vehicule." << endl;
    }

protected:
    int m_prix;
};

class Voiture : public Vehicule {
public:
    void affiche() const {
        cout << "Ceci est une voiture." << endl;
    }

private:
    int m_portes;
};

class Moto : public Vehicule {
public:
    void affiche() const {
        cout << "Ceci est une moto." << endl;
    }

private:
    double m_vitesse;
};

void presenter(Vehicule v) {
    v.affiche();
}

int main() {
    Vehicule v;
    presenter(v);

    Moto m;
    presenter(m);

    system("PAUSE");

    return 0;
}

此代码无法编译。你知道为什么吗?Visual Studio 说 m 和 v 已使用但未初始化。但不是吗?我的意思是,我初始化它们。

此代码无法编译。我重复。它不编译。

我得到的错误(不是警告,这是一个错误)是:

使用了未初始化的局部变量“m” 使用了未初始化的局部变量“v”

4

3 回答 3

1

C4700 是警告,而不是错误。你的代码编译得很好。它只是告诉您成员m_vitesse,m_portesm_prix未初始化。如果要初始化它们,则需要为这些类提供自己的构造函数,例如:

class Vehicule {
public:
    // This constructor initializes m_prix to 0
    Vehicule() : m_prix(0) { }

    void affiche() const {
        cout << "Ceci est un vehicule." << endl;
    }

protected:
    int m_prix;
};
于 2013-04-14T16:58:20.303 回答
1

您的代码会编译,但会收到警告。因为Vehiculelaks 默认构造函数将初始化 m_prix。您可以通过向其添加构造函数来修复它。

class Vehicule {
public:
  Vehicule():m_prix(0){};
    void affiche() const {
        cout << "Ceci est un vehicule." << endl;
    }
于 2013-04-14T16:59:24.547 回答
0

Visual Studio 抱怨,因为您没有初始化类的数据成员(m_prixm_portes)。方法affiche必须是虚拟的,函数presenter必须通过引用给出它的参数。

class Vehicule {
public:
    virtual void affiche() const {
        cout << "Ceci est une voiture." << endl;
    }
};

void presenter(const Vehicle& v) {
    v.affiche()
}
于 2013-04-14T17:08:36.427 回答