C++ -从父类派生公共函数以在main.cpp文件中使用

ao218c7q  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(66)

我遇到的错误在main.cpp文件中。它告诉我将.getName()设置为公共函数;我相信它是。我如何解决这个问题?
我的代码由两个头文件“abstractsales”和“salesperson”组成。Salesperson继承了abstractsales的所有特征,包括“getName()”函数。但同样,不能在主函数中调用此函数。请注意下面的代码。

抽象销售:

class abstractsales{
private:
    // This class has no private variable as it's used for a parent for public functions
public:
    string name, position;
    int EID, bossID;

    /*
     * This abstract sales class generalizes the needs for each type of sales person
     * for them to adopt in subclasses.
     */
   // ===== Get Functions =====
    string getName(){
        return this->name;
    }

字符串

SalesPerson类:

class salesperson : abstractsales{
private:
    double commission = 0.05;
    double totalSalesProfit;
public:
    // Default Constructor
    salesperson(){
        this->name = "";
        this->position = "";
        this->EID = 0;
        this->bossID = 0;
        this->commission = 0.05;
    }
    // Constructor with appropriate parameters
    salesperson(string n, string p, int employeeID, int BID){
        this->name = p;
        this->position = n;
        this->EID = employeeID;
        this->bossID = BID;
        this->commission = 0.05;
    }

    // ===== Get Functions =====
    double getCommission(){
        return this->commission;
    }
    double getTotalProfit(){
        return totalSalesProfit;
    }

    // Function to add sale to total amount
    void addSale(double amt){
        totalSalesProfit += amt * commission;
    }
};

在main.cpp中出现错误:

//附加图像enter image description here
我尝试在salesperson类中初始化get函数;但是,abstractsales用于多个子类。我不确定如何解决这个错误。

9rbhqvlz

9rbhqvlz1#

public继承基类。

class Foo: public Bar { ... }

字符串

sulc1iza

sulc1iza2#

在c++中,你可以有 public 继承,或者 private 继承。Public继承看起来像这样:

class Derived : public Base {...};

字符串
私有继承看起来像这样:

class Derived : private Base {...};


class Derived : Base {...};


换句话说,继承在默认情况下是私有的,即使这不是您大多数时候想要的。
通过公共继承,Base的所有公共成员都成为Derived的公共成员,并且对其用户可见。换句话说,您的派生类继承基类的实现和接口。
通过私有继承,Base的公共成员变成了Derived的私有成员。所以你的派生类只继承了基类的实现,而不是基类的接口。
在绝大多数情况下,您希望使用公共继承。

相关问题