查看如下代码段: #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; cout << pd->f(2) [...]
C++中不能在派生类中对父类函数进行重载
http://lujun.info/2011/08/c%e4%b8%ad%e4%b8%8d%e8%83%bd%e5%9c%a8%e6%b4%be%e7%94%9f%e7%b1%bb%e4%b8%ad%e5%af%b9%e7%88%b6%e7%b1%bb%e5%87%bd%e6%95%b0%e8%bf%9b%e8%a1%8c%e9%87%8d%e8%bd%bd/
C++函数传引用问题一则
今天碰到一个C++问题,体现了基础知识不够好。在这里总结一下问题的来龙去脉。 首先我参照SAFE_DELETE(这个MACRO应该用过微软C++的都熟悉)写了一个SAFE_DESTROY_DELETE。用于传入CWnd*后先DestroyWindow再delete指针。 void SAFE_DESTROY_DELETE(CWnd* pWnd) { if (pWnd) { if (::IsWindow(pWnd)) { pWnd->DestroyWindow(); } SAFE_DELETE(pWnd); } } 在写这个函数的时候我只是想到不要用Macro,这样可以有一个编译器的类型检查。这里面其实有一个比较低级的错误。开始没发现,你能看出来吗? 然后发现这个错误后我试图把函数修改一下,为了不动到其他会调用此函数的地方,我灵机一动,改了一处,觉得应该就可以了。修改后如下: void SAFE_DESTROY_DELETE(CWnd* &pWnd) { if (pWnd) { if (::IsWindow(pWnd)) { pWnd->DestroyWindow(); } SAFE_DELETE(pWnd); } } 编译后发觉一堆错误。VC2010的错误信息如下: error C2664: ‘SAFE_DESTROY_DELETE’ : cannot convert parameter 1 from ‘ B* ‘ to ‘CWnd *&’ 这里B是一个CWnd的派生类。同样的代码在VC6中的错误信息如下: error C2664: ‘SAFE_DESTROY_DELETE’ : [...]
http://lujun.info/2011/04/c%e5%87%bd%e6%95%b0%e4%bc%a0%e5%bc%95%e7%94%a8%e9%97%ae%e9%a2%98%e4%b8%80%e5%88%99/