2012-11-27 33 views
5

Lớp với mã này là một lớp học tham khảo cho một con trỏ của ClassName, ví dụ:Chạy vào nhà điều hành "công việc" ClassName * ". Điều đó có nghĩa là gì?

class ClassName; 

class ClassRef 
{ 
    ClassName* m_class; 
    ... 
    operator ClassName *() const { return m_class; } 
... 

Tôi giả định này được sử dụng để kiểm tra tính hợp lệ con trỏ, chẳng hạn như:

ClassRef ref(new ClassName()) 
if (ref) { bla bla bla } 

Tôi thích hợp trong suy nghĩ của tôi?

+3

Có phải 'classname' hoặc' ClassName'? Vui lòng * chính xác * trong mã được trình bày. –

Trả lời

9

Đây là quá tải của toán tử chuyển đổi. Bất cứ khi nào một đối tượng ClassRef cần được chuyển đổi thành loại con trỏ ClassName, toán tử này được gọi.

Vì vậy;

ClassRef r; 
ClassName * p = r; 

sẽ tận dụng tình trạng quá tải này.

+0

Vì vậy, tôi chỉ viết một bài kiểm tra nhỏ liên quan đến hai lớp - Base và Ref. Khi tôi thử sử dụng tham chiếu trong câu lệnh "if" thì quá tải của toán tử này được gọi là - tại sao? – NindzAI

+1

@NindzAI: "nếu" yêu cầu bất kỳ điều gì có thể được đánh giá 0 hoặc không phải 0. Classname không thể, nhưng ClassRef * (là một con trỏ) có thể. Và vì 'ref' có thể được chuyển đổi thành một con trỏ thông qua toán tử chuyển đổi đó, nó được gọi. –

+0

@NindzAl Đó là bởi vì trong khi trình biên dịch cố gắng thu được một giá trị có thể được sử dụng thay cho biểu thức 'bool', nó thấy rằng' ClassRef' có thể được chuyển đổi thành kiểu con trỏ. Bạn sẽ nhận thấy rằng nếu bạn cung cấp toán tử chuyển đổi cho một 'bool' trực tiếp, toán tử đó sẽ được ưu tiên. Và nếu bạn cung cấp một chuyển đổi cho một kiểu con trỏ khác, bạn sẽ nhận được một lỗi trình biên dịch do sự mơ hồ. – enobayram

Các vấn đề liên quan