cuốn sách gpt4 ai đã làm

c++ - Toán tử quá tải cho lệnh gọi hàm

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 08:27:15 hai mươi bốn 4
mua khóa gpt4 Nike

Có thể quá tải một toán tử chỉ dành cho một hàm hay không. Tôi muốn ghi đè toán tử '->' nhưng chỉ khi nó được gọi bằng hàm in ( ->print() ). Tôi biết đây là một yêu cầu lạ nhưng tôi đang nỗ lực triển khai một API nhất định và tôi cần một cái gì đó như thế này.

Ví dụ:

Mèo mèo;
cat.walk();
cat->print(); //Tôi chỉ muốn quá tải cuộc gọi này

Tuy nhiên, tôi không muốn làm quá tải toán tử "->" trong mọi trường hợp. Ví dụ:

Mèo* mèo;
cat->walk(); //cái này sẽ hoạt động bình thường
cat->print(); //điều này sẽ không gọi hàm print(),
//vì tôi đã quá tải cat->print()

câu trả lời hay nhất

Bạn có thể nạp chồng toán tử -> bằng cách sử dụng đối tượng trả về ảo. Phương thức print() thực sự có thể được đặt ở chế độ riêng tư và chỉ có thể truy cập được thông qua một trình truy cập. Trong một ví dụ tối thiểu:

#include 

cấu trúc Cát;

cấu trúc CatAccessor {
private:
lớp bạn Mèo;
CatAccessor(Cat& cat): cat(cat) {}
Mèo & mèo;
public:
làm mất hiệu lực in();
CatAccessor* operator->() { trả lại cái này }
};

cấu trúc Cát {
CatAccessor* operator->() { return CatAccessor(*this);
void walk() { std::cerr << "Walk call" << std::endl }
private:
void print() { std::cerr << "In được gọi" << std::endl }
lớp bạn CatAccessor;
};

void CatAccessor::print() { cat.print() }

int chính() {
Mèo mèo;
cat.walk();
mèo->in();
Mèo* catp = &cat;
catp->walk();
// lỗi: catp->print();
return 0;
}

Về c++ - toán tử quá tải cho lệnh gọi hàm, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/15346634/

hai mươi bốn 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress