首页 > 解决方案 > 为什么当我尝试从基类打印属性时,它总是 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 中创建了一个打印函数,所有派生类都继承了这个函数+它们打印自己的属性。

标签: c++inheritanceprintingderived-class

解决方案


在这个构造函数中:

House(double p,int l):
          Servicii(price),level(l){}

您正在使用基类成员price来初始化Servicii. 这是不正确的,实际上在基类完全初始化之前访问该成员是未定义的行为。

您只需要使用该值p来初始化Servicii

House(double p,int l):
          Servicii(p),level(l){}

如果您打开编译器警告,您将收到有关犯此类错误的警告。


推荐阅读