【C++程序设计知识点】
1. **动态内存管理**:
- 在C++中,`new`关键字用于动态分配内存,如`int *p = new int(100)`分配了一个整型变量并初始化为100。释放动态内存应使用`delete`,对于单个对象,使用`delete p`;对于数组,使用`delete []p`。因此,释放p所指向的动态内存的正确语句是`delete p`。
2. **运算符重载**:
- 运算符重载允许为已有运算符提供自定义的行为,但不能改变其操作数数量、优先级、结合性或语法结构。选项A、B、C描述错误,因为它们都试图改变这些特性。选项D是正确的,因为可以通过运算符重载改变运算符的功能。
3. **访问修饰符**:
- 在C++中,类中的成员默认为私有(private)访问属性。选项A、C、D错误,选项B正确。
4. **输入输出流对象**:
- `cin`是`istream`类的对象,用于标准输入;`cout`是`ostream`类的对象,用于标准输出;`cerr`和`clog`也是`ostream`的派生类对象,分别用于错误输出和日志输出。因此,`cin`是`istream`类的对象。
5. **析构函数**:
- 析构函数是类的特殊成员函数,用于清理对象在生命周期结束时的资源,其访问属性应定义为`public`,以便在对象生命周期结束时自动调用。
6. **函数模板与类模板**:
- 函数模板不需程序员实例化,由编译器自动完成,选项A错误;选项B正确。类模板的成员函数是函数模板,实例化类模板后,成员函数会随之实例化,选项D正确。选项C错误,因为即使类定义中有函数模板,类本身并不因此成为类模板。
7. **运算符重载规则**:
- 运算符重载不能改变运算符的基本特性,如目数、优先级和结合性,但可以改变其功能。选项D正确,选项A、B、C错误。
8. **面向对象编程基础**:
- 面向对象编程将数据和对数据的操作封装在一起,形成一个整体,即对象。选项A正确。
9. **内联函数**:
- 内联函数的定义通常使用`inline`关键字,但定义时`inline`应放在前面,所以选项B正确。
10. **类模板**:
- 定义类模板时使用的关键字是`template`,选项D正确。
11. **虚基类**:
- 要将类A声明为类B的虚基类,使用语法`class B : virtual public A`,选项B正确。
12. **格式控制符**:
- `endl`、`hex`和`flush`是定义于`iostream.h`中的格式控制符,`setw`是定义于`iomanip`库中的,选项D不属于`iostream.h`。
13. **访问控制属性**:
- C++的访问控制属性包括公有(`public`)、私有(`private`)和保护(`protected`),没有"公有类型"、"私有类型"和"友元类型"这样的术语,选项A、B、D描述错误。
14. **构造函数**:
- 构造函数的特征包括:函数名与类名相同,可以重载,可以有默认参数。构造函数不需要指定类型说明,选项D错误。
15. **友元**:
- 将类A声明为类B的友元后,类A可以直接访问B的所有成员,包括公有、保护和私有成员,选项D正确。
16. **虚函数**:
- 对于类定义,`A∷func2()`是非虚函数,`B∷func1()`在派生类中重写了基类的虚函数,因此是虚函数,选项C正确。
17. **成员访问权限**:
- 关键字`public`后面定义的成员为公有成员,选项A正确。
18. **类的定义**:
- 类的定义通常包含数据成员和成员函数,选项B正确。
19. **ifstream流对象**:
- 使用`ifstream`类打开文件,默认的打开方式是`ios::in`,用于读取操作。
20. **类模板的模板参数**:
- 类模板的模板参数可以作为数据成员的类型、成员函数的返回类型和成员函数的参数类型,选项D正确。
21. **继承性**:
- C++中的继承机制允许通过类模板实现面向对象程序设计的继承性,描述正确,选项B正确。
22. **抽象类**:
- 如果一个类至少有一个虚函数,那么它被称为抽象类,描述正确,选项B正确。
23. **拷贝构造函数**:
- 当类含有指针数据成员时,不定义拷贝构造函数可能导致指针悬挂问题,描述正确,选项B正确。
24. **成员函数声明**:
- 成员函数体写在类外部时,确实需要在类内部保留函数声明,描述正确,选项B正确。
25. **构造与析构函数调用顺序**:
- 创建派生类对象时,先调用基类的构造函数,再调用派生类的构造函数;销毁时,先调用派生类的析构函数,再调用基类的析构函数,描述正确,选项B正确。