Tôi có một lớp cơ sở triển khai toán tử ==. Tôi muốn viết một lớp khác, kế thừa lớp cơ sở và nên triển khai lại toán tử ==.thực hiện toán tử == khi sử dụng thừa kế
Dưới đây là một số mẫu mã:
#include <iostream>
#include <string>
class Person
{
public:
Person(std::string Name) { m_Name = Name; };
bool operator==(const Person& rPerson)
{
return m_Name == rPerson.m_Name;
}
private:
std::string m_Name;
};
class Employee : public Person
{
public:
Employee(std::string Name, int Id) : Person(Name) { m_Id = Id; };
bool operator==(const Employee& rEmployee)
{
return (Person::operator==(rEmployee)) && (m_Id == rEmployee.m_Id);
}
private:
int m_Id;
};
void main()
{
Employee* pEmployee1 = new Employee("Foo" , 1);
Employee* pEmployee2 = new Employee("Foo" , 2);
if (*pEmployee1 == *pEmployee2)
{
std::cout << "same employee\n";
}
else
{
std::cout << "different employee\n";
}
Person* pPerson1 = pEmployee1;
Person* pPerson2 = pEmployee2;
if (*pPerson1 == *pPerson2)
{
std::cout << "same person\n";
}
else
{
std::cout << "different person\n";
}
}
này mẫu mã cung cấp cho các kết quả sau:
different employee
same person
Nơi tôi muốn, ngay cả khi xử lý Person * con trỏ, để đảm bảo rằng họ là khác nhau .
Tôi phải giải quyết vấn đề này như thế nào?
Cảm ơn!
tôi tin rằng bạn đang cố gắng giải quyết vấn đề sai. nếu bạn cần một toán tử == hoạt động dựa trên kiểu tham chiếu/kiểu con trỏ, bạn không nên sử dụng thừa kế ở vị trí đầu tiên. – hawk