2013年相关概念题
什么是逻辑错误?什么是语法错误?举例说明
逻辑错误
主要是指程序使用的算法的错误,可以通过编译,但是会产生意想不到的效果。例如:
#include <iostream>
using namespace std;
int main() {
unsigned n = 10, sum = 0;
while (n >= 0) { // 程序死循环,unsigned类型的n永远不可能小于0
sum += n;
--n;
}
cout << sum;
return 0;
}
语法错误
通常是指程序中对编程语言的规则的违背,无法通过编译,能够在编译阶段检测出来。例如:
#include <iostream>
using namespace std;
int main() {
char *ch = "abcd"; // "abcd"为字符串常量,而ch为char*类型,类型不匹配
return 0;
}
控制语句有哪几种
程序设计的结构主要有三种,其分别是顺序结构、选择结构和循环结构。
顺序结构
顺序结构中的语句就是普通的没有产生任何分支或者转向的语句,其流程图如下:
选择结构
选择结构常用于判断条件,符合相应的条件执行相应的程序段,属于此结构的语句主要是if...else...语句和switch语句,简要流程图如下(if...else语句):
循环结构
循环结构常用于多次、反复的执行某段程序代码,直至其满足某条件为止,属于此结构的语句主要是while语句、do...while语句和for语句,简要流程图如下(do...while语句):
运算符重载是什么,它如何增强C++的扩展性?
定义
运算符重载就是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同的行为。运算符重载使C++中的同样的运算符能够支持对多种类型的操作,甚至是自定义类型的的操作,扩展了C++运算符的含义。同时,运算符重载是在编译过程中完成,属于编译时多态。
重载规则
C++标准规定,不能重载的运算符有:类属关系运算符“.”、成员指针运算符“.*”、作用域分辨符“::”和三目运算符“?:”。必须重载为成员函数的运算符有:赋值运算符“=”、取下标运算符“[]”、成员访问运算符“->”和函数运算符“()”。
为什么说"继承是C++面向对象的一个主要特征之一"?(同2011)
继承是软件重用的一种形式,继承机制允许程序员在保持原有类特征的基础上,进行更具体、更详细的类的定义,以原有的类为基础产生新的类,提高了代码的重用性和可扩充性。通过继承可以充分利用别人做过一些类似的研究,和已有的一些分析、解决方案。进一步提高程序的抽象程度,同时虚函数的多态性也是在继承功能的基础之上展开的。
类作用域和文件作用域的区别
类作用域
类作用域定义在类内,在类作用域之内,如果没有声明同名的标识符,可以直接访问;在类作用域之外,相应的数据成员和函数成员就被隐藏起来了,普通的数据和函数成员只能由ptr->m或x.m这样的表达式访问,类的静态成员可以使用X::m的方式访问。(其中X为类名,x为类X的对象,m为类X的数据成员)
文件作用域
在任何函数外声明的标识符的作用域为文件作用域,可以从声明标识符的位置开始,一直到文件末尾处的任何函数中访问。
函数原型作用域
在函数原型声明时形式参数的作用范围就是函数原型作用域。
局部作用域
- 函数形参列表中的形参的作用域,从形参列表中的声明处开始,到整个函数体结束之处为止;
- 函数体内声明的变量,其作用域从声明处开始,一直到声明所在块结束的大括号为止。