我有下一个代码(让它变得简单和简单),
为什么我speed +=
工作了,虽然speed
根本没有初始化?
#include <iostream>
using namespace std;
class Vehicle {
protected:
int speed;
public:
virtual void repair(int j) {
cout << "Vehicle " << j << endl;
if (repair())
{
speed += j;
cout << "Speed:" << speed;
}
}
int repair(){ cout << "Vehicle repair " << endl; return 1; }
};
void main() {
Vehicle v; //Car c; CityCar cc;
Vehicle * vp; //Car * cp;
vp = &v;
vp->repair(1);
}
答案 0 :(得分:4)
在C ++中,你总是可以使用未初始化的变量,最多你会得到一个警告。除非您设置“警告为错误”选项,否则显然会出现错误。
不同的编译器会做不同的事情,因此在您的情况下,根据编译器和编译器选项,您可以收到警告。 请参阅this question。
答案 1 :(得分:0)
注意事实上通过创建一个对象指针 然后在其上执行赋值运算符 你实际上是用垃圾值初始化它
试试这个:
Int x,*a;
a=&x;
cout<<*a;
答案 2 :(得分:0)
Speed是一种int类型,int是内置类型。如果一个对象是内置类型,则初始化值将其设置为零,默认初始化它会给它一个未定义的值。 在您的情况下,速度具有未定义的值。在公共部分中使用构造函数初始值设定项添加此构造函数应该适合您:
Vehicle():speed {0} {}