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

Đang cố gắng thêm tính đa hình vào hàm mẫu

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 14:05:01 26 4
mua khóa gpt4 Nike

Có, bạn không thể có các hàm thành viên lớp ảo mẫu. Điều đó có ý nghĩa, và thay vì cố gắng tìm ra phần đó... tôi đang cố gắng như ma quỷ để tránh đa thừa kế/ảo.

Tôi có một lớp mẫu A, một lớp mẫu trừu tượng B kế thừa từ A và một lớp C kế thừa từ B.

mẫu 
hạng A
{
protected:
giá trị T;
public:
A(T a) {val = a;}
T val() {return val();}

mẫu
A cast_as() { return A((J)val }
};

mẫu
lớp B : công khai A
{
protected:
int b;
public:
B(T a) : A(a){b=10*a;}
ảo foo() = 0;
//và tôi muốn, nhưng điều này không thể tồn tại
//mẫu
//B* BCastAs();

};

mẫu
lớp C : công cộng B
{
protected:
int c;
public:
C(T c) : B(c) { c=c+1;}
ghi đè foo() ảo { cout << (a+b+c);}
};

int main() { C c(10); B* b = c.BCastAs();}

Và tôi không thể nghĩ ra cách nào để làm điều này... Có vẻ như điều đó là có thể vì B* thực sự không cần biết đó là chữ C (giống như việc trả lại một cuộc gọi nhân bản) nhưng tôi thì không biết cách thực hiện mà không cần Không thể để c di chuyển chính xác trong trường hợp hàm thành viên mẫu ảo.

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

Thoạt nhìn, mã mẫu bạn đăng có vẻ có lỗi thiết kế nghiêm trọng.

Thông thường không cần phải có các hàm ảo trong mẫu lớp vì bạn có thể sử dụng mẫu CRTTránh chúng.

Ý định của bạn là bạn cần kế thừa lớp (đó là cách bạn tạo mẫu "trừu tượng"), triển khai giao diện đã xác định. Giao diện có thể hoặc (tốt nhất là) không được xác định là một phương thức ảo thuần túy (kiểm tra giao diện tĩnh cũng được chấp nhận và sẽ dẫn đến ít thông báo lỗi trình biên dịch khó hiểu hơn khi không triển khai phương thức).

Bạn có thể tìm thấy nó trong của tôi Thư viện mẫu STTCL Xem ví dụ về loại khung mẫu này và cách sử dụng kỹ thuật này. .

Tóm lại: sử dụng đa hình tĩnh.

gia hạn:
Có, tôi cũng sử dụng các phương thức ảo thuần túy trong STTCL, nhưng theo một cách hoàn toàn khác (giống như một điểm vào cơ bản để ghép một bộ phân cấp thừa kế hoàn chỉnh).

Về c++ - đang cố gắng thêm tính đa hình vào các hàm mẫu, 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/17435986/

26 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
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