C++中不能在派生类中对父类函数进行重载

查看如下代码段: [c light=”false” toolbar=”false”] #include<iostream> using namespace std; class B { public: int f(int i) { cout << “f(int): “; return i+1; } // … }; class D : public B { public: double f(double d) { cout << “f(double): “; return d+1.3; } // … }; int main() { D* pd = new D;… Continue reading C++中不能在派生类中对父类函数进行重载

C++函数传引用问题一则

今天碰到一个C++问题,体现了基础知识不够好。在这里总结一下问题的来龙去脉。 首先我参照SAFE_DELETE(这个MACRO应该用过微软C++的都熟悉)写了一个SAFE_DESTROY_DELETE。用于传入CWnd*后先DestroyWindow再delete指针。 [c light=”false” toolbar=”false”] void SAFE_DESTROY_DELETE(CWnd* pWnd) { if (pWnd) { if (::IsWindow(pWnd)) { pWnd->DestroyWindow(); } SAFE_DELETE(pWnd); } } [/c] ​在写这个函数的时候我只是想到不要用Macro,这样可以有一个编译器的类型检查。这里面其实有一个比较低级的错误。开始没发现,你能看出来吗? 然后发现这个错误后我试图把函数修改一下,为了不动到其他会调用此函数的地方,我灵机一动,改了一处,觉得应该就可以了。修改后如下: [c light=”false” toolbar=”false”] void SAFE_DESTROY_DELETE(CWnd* &pWnd) { if (pWnd) { if (::IsWindow(pWnd)) { pWnd->DestroyWindow(); } SAFE_DELETE(pWnd); } } [/c] 编译后发觉一堆错误。VC2010的错误信息如下: error C2664: ‘SAFE_DESTROY_DELETE’ : cannot convert parameter 1 from ‘ B* ‘… Continue reading C++函数传引用问题一则