【问题标题】:vector pointers, inheritance向量指针,继承
【发布时间】:2026-01-18 01:00:01
【问题描述】:

**嗨。我有 2 个问题。

1) 我正在做一个复制构造函数。 我的声明是:**

ticket_office& operator=(const ticket_office& d);

但是,当我执行现在发布的功能时:

ticket_office&::operator= (const ticket_office& d){

sizeTickets_sold=d.sizeTickets_sold;
capacityTickets_sold=d.capacityTickets_sold;

if(this!=&d){

    Tickets_for_sale=d.Tickets_for_sale;

    Tickets_sold=new Ticket[d.capacity];

    for(int i=0;i<sizeTickets_sold;i++){
        Tickets_sold[i]=d.Tickets_sold[i];
    }
}

return* this;
}

编译器给了我这个错误:-

1) [错误] 'Ticket_office& operator=(const Ticket_office&)' 声明中的明确限定”

2) [错误] 'Ticket_office& operator=(const Ticket_office&)' 必须是非静态成员函数"

为什么?没看懂?

还有第二个问题:

2)如果我创建一个从另一个公共继承的类,子类可以访问母类的所有公共和受保护但不是私有的元素,对吗?

如果在受保护的情况下继承? 私下里?

我了解在所有 3 种情况下,子类都可以访问公共和受保护的项目,但不能访问私有项目。但真正的区别是什么?

【问题讨论】:

    标签: c++ pointers inheritance vector


    【解决方案1】:
    1. 您的运算符定义需要限定符和返回类型。试试Ticket_office&amp; Ticket_office::operator =(const Ticket_office &amp;d)

      顺便说一句,这不是复制构造函数。这是一个复制赋值运算符。复制构造函数实际上看起来像构造函数,并以const Ticket_office&amp; 作为其参数。喜欢Ticket_office::Ticket_office(const Ticket_office &amp;other)

    2. 如果你说class A : public B,那么是的,A 的成员函数可以访问B 的公共和受保护成员。外人只能访问公开的东西,A 不能访问B 的私密内容。

      公共继承、私有继承和受保护继承之间的区别在于A 之外的类other 在与A 的实例通信时可以看到哪些类*.

      • 通过公共继承,每个人都可以看到B 中公开的内容,A 的子类可以访问受保护的内容。
      • 使用受保护的继承,只有A 的子类可以访问B 的公共和受保护成员。
      • 使用私有继承,只有A 本身可以访问B 的成员。

    *我完全忘记了私有和受保护的继承是如何与基类指针相关的。常识表明,如果您通过指向B 的指针/引用与A 交谈,则可以看到公共内容,但一旦您沮丧,就会失去访问权限。

    【讨论】: