#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'使用
答案 0 :(得分:1)
C4700是警告,不是错误。你的代码编译得很好。它只是告诉您成员m_vitesse
,m_portes
和m_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;
};
答案 1 :(得分:1)
你的代码会编译,但是会收到警告。因为Vehicule
提供了初始化m_prix的默认构造函数。您可以通过添加construtor来修复它。
class Vehicule {
public:
Vehicule():m_prix(0){};
void affiche() const {
cout << "Ceci est un vehicule." << endl;
}
答案 2 :(得分:0)
Visual Studio抱怨,因为您没有初始化类的数据成员(m_prix
,m_portes
等)。方法affiche
也必须是虚拟的,函数presenter
必须通过引用给出其参数。
class Vehicule {
public:
virtual void affiche() const {
cout << "Ceci est une voiture." << endl;
}
};
void presenter(const Vehicle& v) {
v.affiche()
}