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

C++ - Deriving public functions from a parent class to use in main.cpp file

提问人:Tyler Fortune 提问时间:11/17/2023 更新时间:11/18/2023 访问量:66

问:

我遇到的错误在主.cpp文件中。它告诉我将 .getName() 设为公共函数;我相信是的。我怎样才能解决这个问题?

我的代码由两个头文件“abstractsales”和“salesperson”组织。Salesperson 继承了 abstractsales 的所有特征,包括 “getName()” 函数。但同样,不能在main中调用此函数。建议下面的代码。

摘要销售:

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 中出现的错误:

附图:在此处输入图片描述

我尝试在销售人员类中初始化 get 函数;但是,AbstractSales 用于多个子类。我不确定如何解决此错误。

++ 的 C++17

评论

2赞 ChrisMM 11/17/2023
你的继承是不正确的——你正在使一切从私有化到你如何继承。你想要abstractsalesclass salesperson : public abstractsales
0赞 Oersted 11/17/2023
stackoverflow.com/questions/4796789/......
1赞 ChrisMM 11/17/2023
这回答了你的问题吗?公共继承、私有继承和受保护的继承有什么区别?
1赞 Some programmer dude 11/17/2023
首先,请确保向我们展示一个最小的可重复示例。强调最小的部分。其次,不要显示错误的图像(或任何其他文本)。将实际的构建日志复制粘贴到您的问题中。

答:

1赞 Joseph Larson 11/17/2023 #1

你有 public 继承基类。

class Foo: public Bar { ... }
0赞 Dima 11/18/2023 #2

在 c++ 中,可以有公共继承,也可以有私有继承。公共继承如下所示:

class Derived : public Base {...};

私有继承如下所示:

class Derived : private Base {...};

class Derived : Base {...};

换句话说,默认情况下,继承是私有的,即使这不是您大多数时候想要的。

通过公共继承,所有公共成员都成为 的公共成员,并且对其用户可见。换言之,派生类继承了基类的实现和接口。BaseDerived

通过私有继承,公共成员成为 的私人成员。因此,派生类只继承实现,而不继承基类的接口。BaseDerived

在绝大多数情况下,您希望使用公共继承。

评论

0赞 Tyler Fortune 11/20/2023
它现在起作用了!谢谢!