C++编程:析构函数、运算符重载与继承深入探讨

版权申诉
0 下载量 111 浏览量 更新于2024-06-27 收藏 62KB DOCX 举报
“C++编程注意事项” C++编程中涉及许多关键概念和技术,这些技术对于编写高效、健壮的代码至关重要。以下是对文档中提到的一些重要知识点的详细解释: 1. **析构函数**:析构函数是C++中类的一个特殊成员函数,它的主要职责是在对象生命周期结束时(通常是对象离开其作用域时)执行一些清理工作,如释放动态分配的内存。析构函数不是用于删除对象,而是帮助释放对象占用的资源。用户可以在析构函数中定义需要在对象销毁前执行的任何操作。 2. **指针与对象**:指针可以用来存储一般变量或对象的地址。对象的指针即为指向对象内存空间起始位置的地址。例如,`Time::Time(int h):hour(h){}` 是一个构造函数,用于初始化`Time`类的对象,`类名*const指针变量名=对象地址;`表示创建一个指向类对象的常量指针,`delete pt;`用于释放指针所指向的对象的内存。 3. **运算符重载**:运算符重载是C++中允许用户为已有运算符提供新实现的功能。它并不改变运算符的原有含义,而是扩展其功能。例如,`function_type operator operator_name (parameter_list) { ... }`是重载运算符的一般形式。值得注意的是,C++中有五个运算符不能被重载:`.`(成员访问),`.*`(指针成员访问),`::`(作用域解析),`sizeof`(计算对象或类型的大小),和`?:`(条件运算符)。 4. **派生类与基类的关系**:继承是C++中实现多态性的基础,派生类可以从基类继承数据成员和成员函数。派生类对象可以赋值给基类对象,因为它们之间存在赋值兼容关系。同时,派生类对象可以初始化基类对象的引用,这是多态性的体现。使用`virtual`关键字可以实现虚继承,避免因多重继承产生二义性。 5. **赋值兼容**:不同类型数据间的赋值被称为赋值兼容,例如基类对象可以接受派生类对象的赋值。这是因为派生类包含了基类的所有成员,所以可以安全地将派生类的值赋给基类。 6. **虚函数与纯虚函数**:虚函数允许动态绑定,使得基类指针或引能够调用派生类的版本。纯虚函数(如`virtual void func() = 0;`)是声明为虚函数但不提供实现的函数,用于定义抽象基类。纯虚函数的存在使得类成为抽象的,不能实例化。 7. **C++的I/O操作**:C++的输入/输出流(如`cout`和`cerr`)是类型安全的。`cout`用于标准输出,`cerr`用于错误输出。`cout`可以通过运算符重载无缝处理不同数据类型的输出,而`width(n)`和`setw(n)`用于设置输出字段的宽度,仅对紧跟其后的第一个输出项生效。 8. **异常处理**:在C++中,异常处理允许在函数中抛出异常,然后在调用链的上层捕获并处理异常。这使得程序可以继续运行,而不是在出现错误时立即崩溃。异常的抛出通常使用`throw`关键字,而捕获异常则使用`try-catch`结构。 以上所述是C++编程中的一些核心知识点,理解和熟练掌握这些概念对于编写高质量的C++代码至关重要。在实际编程中,还需要注意遵循最佳实践和标准,确保代码的可读性、可维护性和效率。
2378 浏览量
C语言编程注意事项 1. 每个程序中一定包含main()函数, 尽管C语言中对函数命名没有限制。 2. printf函数永远不会自动换行, 只能用\n来实现, 回车键进行的换行在编译中会出现错误信息。 3. 在vs2008等平台中编译、测试要加 system("pause"); 来暂停dos自动退出引起的printf无法显示。 4. 所有自定义变量必须声明才能使用。 5. 每行一般只写一条语句, 在运算符两边加一个空格, 便于阅读。 6. 整数除法将会自动舍位, 不进行四舍五入的操作。 7. for(初始化部分;条件部分;增长部分) 比while 更适用于初始化和增长步长都是单条语句的情况。 8. 使用 #define 名字替换文本对部分"幻数" 赋予意义便于阅读 #define结尾无需;号来结束。 9. EOF(end of file)表示没有字符输入时定义在stdio.h 头文件中 EOF不等于\n 换行等。 10. 由于!= 的优先级大于 = ,因此如果对判断中存在变量赋值时 应对赋值加() 例如: while((c = getchar()) != EOF)。 11. getchar() 用于用户输入直至键入回车键。 12. 变量名以字母和数字组成, (下划线"_"被默认为字符, 以下划线为首写字母的为库类变量名), 变量常以小写字母开头,内部变量名前31位有效, 外部变量名至少前6位保持唯一性。 13.在C语言中是区分字母大小写的。 14. 一个字符常量为一个整数, 用''单引号括起来。例如: '0' 为48, 它与0没有任何关系。 15. ANSI C语言的转义符: \a 响铃符; \b 回退符; \f 换页符; \n 换行符; \r 回车符; \t 横向制表符 ; \v 纵向制表符; \\ 反斜杠; \? 问号; \' 单引号; \" 双引号; \ooo 八进制数; \xhh 十六进制数; '\0' 表示0, 即(null)。 16. 'x'与"x"的区别: 'x'表示一个整数, 字母x在其字符集中对应的数值, "x"表示包含一个字符x 以及一个结束符'\0'。 17. const在声明变量中起限制作用, 该限定变量的值不能被修改。 18. %运算符不能应用于float或double类型。 19. char类型转换为int型时, 因为无法判断它是signed还是unsigned,这样其结果有可能为负数, 所以转换时尽量指定signed和unsigned限制符。 20. ++i与i++ 的不同之处: ++i是先 +1再使用i, i++ 是先使用i再 +1。 21. 三元运算符"?:" 第一个表达式的括号不是必须的, 但是由于三元表达式的优先级非常低, 因此我们还是将第一个表达式用()括起来以便于阅读和理解。 22. C语言中可以使用递归 (即函数调用自身函数), 这样做并不节省储存空间也不加快执行速度, 只是使程序紧凑便于理解。