2011相关概念题
简述你对C++中的数据类型和抽象数据类型(ADT)的理解
数据类型
数据类型是一组性质相同的具有一定范围的值集合以及定义在这个值集合上的一组操作。数据类型既有内部数据类型,如int、char、float、bool等,也有自定义外部数据类型,如枚举类型、结构类型、联合类型、类类型等。
ADT
ADT即Abstract Data Type(抽象数据类型),是基于已有类型组合而组成的复合数据类型,类就是抽象数据类型的一种描述形式。
举例相关代码,阐述C++在什么情况下必须进行运算符重载
当运算符的操作数中有自定义类型的时候,需要将相关运算符重载。
#include <iostream>
using namespace std;
class Complex {
friend ostream& operator<<(ostream& output, const Complex& c); // 重载为友元函数,使用流插入运算符输出
public:
Complex(double r = 0.0, double i = 0.0) : real(r), imaginary(i) {}
Complex operator+(const Complex& c); // 重载运算符+,使其在左操作数为Complex类时能够识别
private:
double real;
double imaginary;
};
ostream& operator<<(ostream& output, const Complex& c) {
output << c.real << "+" << c.imaginary << "i";
return output;
}
Complex Complex::operator+(const Complex& c) {
return Complex(real + c.real, imaginary + c.imaginary);
}
int main() {
Complex a(10, 20), b(5, 8);
cout << (a + b) << endl;
cout << (a + 2) << endl;
return 0;
}
为什么说"继承是C++面向对象的一个主要特征之一"?
继承是软件重用的一种形式,继承机制允许程序员在保持原有类特征的基础上,进行更具体、更详细的类的定义,以原有的类为基础产生新的类,提高了代码的重用性和可扩充性。通过继承可以充分利用别人做过一些类似的研究,和已有的一些分析、解决方案。进一步提高程序的抽象程度,同时虚函数的多态性也是在继承功能的基础之上展开的。
如何声明和使用虚函数,说明它在多态性中的作用和含义
声明和使用
虚函数的声明语法是:
virtual 函数类型 函数名(参数表);
虚函数声明只能出现在类定义中的函数原型声明中,不能在成员函数实现的时候。
作用和含义
虚函数是运行时多态的一种实现方式,基类中的成员函数被定义为虚函数,派生类对相应的虚函数进行了重写,使用的时候,可以使用基类指针指向派生类对象,通过这个基类指针能够访问到派生类中重写的函数,这样,通过基类的指针就可以使属于不同派生类的不同对象产生不同的行为,从而实现运行时的多态。程序能够完成同样的消息被不同的类型的对象接收时导致不同的行为,能够用更加一般化的操作方式操作部分具体的对象。
函数模板与模板函数的区别和联系
区别
函数模板重点在于模板,其处理的数据类型是参数化的类型,函数模板本身在编译时不会生成任何目标代码。模板函数重点在于函数,编译器以函数模板为样板,生成了一个函数,这个函数就是模板函数,这个实例化的过程会生成目标代码。
联系
函数模板是数据类型参数化的函数定义,是一个函数族,代表了操作算法相同的一类函数,而模板函数则只是这个函数族中的一个具体函数。