游目鱼 2019-08-15 22:35 采纳率: 50%
浏览 242
已采纳

C++友元类和派生类访问变量的怪异之处

有一个很蠢的问题,其实一般也不太可能这样写,不过C++Primer上讲解内容时用来举例子,突发奇想试下它们的区别,结果郁闷了...

class Quote
{
    friend class Bulk_quote;
private:
    string bookNo;
public:
    Quote() = default;
    Quote(const string &book, double sales_price) :
        bookNo(book), price(sales_price) {}
    virtual ~Quote() = default;

    virtual double net_price(size_t n) const
        {return n * price;}
    string isbn() const {return bookNo;}
    int i = 1;
protected:
    double price = 0.0;
};

class Bulk_quote
{
public:
    double test() { return price; }
};

这个报错

class Quote
{
private:
    string bookNo;
public:
    Quote() = default;
    Quote(const string &book, double sales_price) :
        bookNo(book), price(sales_price) {}
    virtual ~Quote() = default;

    virtual double net_price(size_t n) const
        {return n * price;}
    string isbn() const {return bookNo;}
    int i = 1;
protected:
    double price = 0.0;
};

class Bulk_quote : public Quote
{
public:
    double test() { return price; }
};

这个没有...

  • 写回答

1条回答

  • Italink 2019-08-16 09:13
    关注

    派生类是自己继承了变量price,因为自己有,所以可以访问,友元类的访问需要有实际的对象,否则无法访问

    #include<iostream>
    using namespace std;
    class Quote
    {
        friend class Bulk_quote;
    private:
        string bookNo;
    public:
        Quote() = default;
        Quote(const string& book, double sales_price) :
            bookNo(book), price(sales_price) {}
        virtual ~Quote() = default;
    
        virtual double net_price(size_t n) const
        {
            return n * price;
        }
        string isbn() const { return bookNo; }
        int i = 1;
    protected:
        double price = 0.0;
    };
    
    class Bulk_quote
    {
    public:
        double test(Quote s) { return s.price; }
    };
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)