2011-07-19 35 views
5

Tôi đã điều sau đây:tinh khiết chức năng ảo và lập luận không sử dụng trong các chức năng con trong C++

class Parent { 
public: 
    virtual bool foo(vector<string> arg1, vector<string> arg2) = 0; 
}; 

class Child : public Parent { 
public: 
    bool foo(vector<string> arg1, vector<string> arg2); 
}; 

// arg1 and arg2 not used - GIVES WARNING 
bool Child::foo(vector<string> arg1, vector<string> arg2) { 
    return false; 
} 

Không có thực hiện Chánh của foo (...) bởi vì nó là một hàm ảo thuần túy. Phụ huynh nói rằng foo nhận hai đối số vectơ. Đứa trẻ thực hiện nó một cách chính xác với hai đối số chuỗi nhưng chúng không được sử dụng. BAO GIỜ, một số trẻ em của Phụ huynh S use sử dụng những lý lẽ này để chúng cần luôn luôn ở đó.

Có cách nào tôi có thể sử dụng quá tải để cho phép foo trong lớp Child nhất định không có đối số ngay cả khi cha mẹ nói nó phải không?

Rất cám ơn.

+3

Trừ khi bạn muốn sao chép 'arg1' và' arg2', tốt hơn thông qua các vectơ bằng cách tham chiếu const. – kennytm

+1

Đây không phải là một "vấn đề quá tải" - bạn đang nói về một cảnh báo nhỏ ở đây :-) –

+0

Chỉnh sửa để loại bỏ quá tải trong tiêu đề - đồng ý xin lỗi: -S. – ale

Trả lời

18

Không chỉ định tên tham số:

// arg1 and arg2 not used - GIVES WARNING 
bool Child::foo(vector<string>, vector<string>) { 
    return false; 
} 

Điều đó sẽ giải quyết những lời cảnh báo.

Nếu trình biên dịch của bạn cho bất cứ lý do không hỗ trợ nó - làm điều này:

// arg1 and arg2 not used - GIVES WARNING 
bool Child::foo(vector<string> arg1, vector<string> arg2) { 
    (void)arg1; (void)arg2; // ignore parameters without "unused" warning 
    return false; 
} 
+1

Tùy thuộc vào trình biên dịch của bạn, bạn cũng có thể sử dụng một số câu lệnh #pragma để tắt cảnh báo này. Theo VC++: #pragma warning (disable: warningNumber). Dưới Borland: #pragma cảnh báo -nnn. Theo GCC tôi không biết. – Shlublu

+1

@Shlublu - vâng, nhưng tôi nghĩ rằng việc ngăn chặn các cảnh báo là một điều xấu, viết mã tốt hơn không tạo ra chúng. Trong trường hợp này nó khá dễ dàng (mặc dù giải pháp thứ hai là một chút "bẩn"). – littleadv

+0

HOÀN THÀNH HOÀN THÀNH. Sẽ chấp nhận khi giới hạn thời gian đánh dấu giải pháp của Stackoverflow hết hạn. – ale

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