C++学习要点:ASSERT使用详解及析构函数、虚函数深度解析

需积分: 9 1 下载量 146 浏览量 更新于2024-09-09 收藏 56KB DOC 举报
C++学习注意点总结 C++是一种广泛使用的编程语言,本文档着重于介绍了一些在学习过程中常见的、易错以及可能不太了解的关键知识点。首先,我们关注的是`ASSERT()`宏,它是一个用于调试的工具,当程序运行时遇到预设条件不满足(如变量非法值)时,会立即停止执行并报告错误。这对于防止程序因意外输入导致的严重后果非常有用,尤其是在Debug版本下。`assert()`则是C++标准库中的函数,与`ASSERT()`相似但可以在Release版本中使用。 接下来讨论的是析构函数和虚函数这两个重要的概念。析构函数是类的特殊成员函数,它的主要作用是在对象生命周期结束时自动调用,释放构造函数中分配的资源,确保内存管理的正确性。这是多态性的体现,因为在运行时根据对象的实际类型来确定调用哪个析构函数,即使对象是基类指针,也会调用子类的析构函数。析构函数常用于清理工作,如内存回收等。 虚函数则是为了实现多态性而设计的,它允许子类重写父类的同名函数。当我们通过基类指针或引用调用虚函数时,实际执行的是子类的版本。如果一个函数在父类中声明为纯虚函数,仅仅是为了提供一个统一的接口,供子类继承时重写。下面的代码示例展示了如何使用这些概念: ```cpp #include<iostream> class Human { public: Human() { human_num++; } static int human_num; virtual ~Human() { human_num--; print(); } virtual void print() { std::cout << "human_num is: " << human_num << std::endl; } protected: private: }; int Human::human_num = 0; Human f1(Human& x) { x.print(); return x; } int main(int argc, char* argv[]) { Human h1; h1.print(); Human h2 = f1(h1); // 调用的是h1的print方法 h2.print(); return 0; } // 输出结果: 1 1 0 0 -1 -2 ``` 在这个例子中,`Human`类有两个实例`h1`和`h2`,`f1`函数通过传入的`Human&`引用调用了`print`虚函数。当`h2`被赋值给`Human`类型的变量时,`print`函数会被自动替换为`Human`子类的实现,体现了多态性。 总结来说,学习C++时要注意理解`ASSERT()`和`assert()`的区别,掌握析构函数的作用以及如何正确使用虚函数以实现多态。这些概念对于编写健壮、灵活的C++程序至关重要。