c++ - 为什么当我尝试从基类打印属性时,它总是 0 ?在 C++ 中
问题描述
我有一个基类
class Servicii{
protected:
double price;
public:
Servicii(double p):price(p){}
double getPrice(){return price;}
和3个派生类Car
Book
House
。因为它们是派生类,所以它们都会有价格
class House:public Servicii{
private:
int level;
public:
House(double p,int l):
Servicii(price),level(l){}
主要是我创建了一些像这样的对象:
House *h1=new House(600,3);
Book *b1=new Book("Dostoievski","Crima si Pedeapsa",5,98.5);
我的问题是当我打印时价格总是 0。例如房子的价格是 600,但是当我打印时它是 0,我不知道为什么。我在 Servicii 中创建了一个打印函数,所有派生类都继承了这个函数+它们打印自己的属性。
解决方案
在这个构造函数中:
House(double p,int l):
Servicii(price),level(l){}
您正在使用基类成员price
来初始化Servicii
. 这是不正确的,实际上在基类完全初始化之前访问该成员是未定义的行为。
您只需要使用该值p
来初始化Servicii
:
House(double p,int l):
Servicii(p),level(l){}
如果您打开编译器警告,您将收到有关犯此类错误的警告。