C++编程中const与抽象类的运用解析

需积分: 9 4 下载量 139 浏览量 更新于2024-07-27 收藏 309KB PDF 举报
本文主要探讨了C++编程中的一些常见问题,包括程序错误、const用法、抽象类、虚拟析构函数、内存管理、私有继承的权限修改、成员函数指针以及运行时多态性。 1. 程序错误分析:在给出的示例程序中,`char* const pszHelp = “hello”;` 定义了一个指向常量字符串的指针,尝试修改`pszHelp[0]`会触发未定义行为,因为常量字符串是不可修改的。正确做法是使用字符数组存储可变字符串。 2. `const`用法: - `const char* p`:这里的`p`是一个指向常量字符的指针,意味着不能通过`p`修改它所指向的字符。 - `char const* p`:同上,只是类型声明顺序不同,但含义相同。 - `char* const p`:这个指针`p`是一个常量,它的值(即指向的地址)不会改变,但可以修改所指向的字符。 3. 抽象类:如果一个类包含至少一个纯虚函数(如`virtual fun() = 0;`),那么这个类就是抽象类,不能被实例化,只能作为其他类的基类,用于提供接口。 4. 虚析构函数:在面向对象编程中,当基类指针指向派生类对象时,为了确保正确销毁派生类的资源,基类的析构函数应声明为虚函数。 5. 代码问题:在`CC`类中,`clear()`函数释放`m_pCount`后没有将其设为`NULL`,这可能导致二次调用`clear()`时出现悬挂指针问题,进而引发未定义行为。 6. 禁止实例化的抽象基类:抽象类在编译时就会因为存在纯虚函数而无法实例化。 7. 修改基类成员权限:在私有继承中,可以通过友元函数来访问和修改基类的私有或受保护成员。 8. 定义成员函数指针:如`void (CC::*bfpClear)() = &CC::clear;`所示,这定义了一个指向`CC`类的成员函数`clear`的指针。 9. 多态性应用:在类继承体系中,一个`A`的指针可以直接指向`D`的对象,因为多态性允许通过基类指针调用派生类重写的成员函数。 10. 程序运行结果:给定的代码展示了运行时多态性,`B`类从`A`派生并重写了`func`方法。`main`函数中,`B* bb`指向一个`B`对象,调用`bb->func()`会执行`B`类的`func`方法,输出"Iaminderived"。 这些知识点涵盖了C++中的指针、常量、抽象类、多态、内存管理和继承等核心概念,对于理解和解决实际编程问题至关重要。