**嗨。我有两个问题。
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&amp; amp; operator =(const Ticket_office&amp;)&#39;&#34;
2)[错误]&#39; Ticket_office&amp; operator =(const Ticket_office&amp;)&#39;必须是非静态成员函数&#34;
为什么呢?我不明白?
第二个问题:
2)如果我创建一个从另一个公共继承的类,那么女儿类可以访问公共和受保护但不私有的母类的所有元素,对吗?
如果继承在受保护的? 私下里?
据我所知,在所有3种情况下,子类都可以访问公共和受保护的项目,但无法访问私有项目。但真正的区别是什么?
答案 0 :(得分:3)
您的运算符定义需要限定符和返回类型。试试Ticket_office& Ticket_office::operator =(const Ticket_office &d)
。
顺便说一下,这不是复制构造函数。这是一个复制赋值运算符。复制构造函数实际上看起来像构造函数,并以const Ticket_office&
作为参数。与Ticket_office::Ticket_office(const Ticket_office &other)
一样。
如果您说class A : public B
,那么是, A
的成员函数可以访问B
的公共成员和受保护成员。局外人只能访问公共内容,A
无法访问B
的私有内容。
公共,私有和受保护的继承之间的区别在于其他而不是A
在他们与A
<的实例通话时可以看到的类SUP> *
B
中看到公开的内容,A
的子类可以访问受保护的内容。A
的子类可以访问B
的公共成员和受保护成员。A
本身才能访问B
的成员。 * 我完全忘记了私有和受保护的继承如何处理基类指针。如果您通过指向A
的指针/引用与B
交谈,常识会建议你看到公共内容,但是一旦你向下转发就会失去访问权。