C++ 期末考试复习¶
C++ 语言中引入了函数重载和虚函数,其用途分别用一句话概括:函数重载是通过静态束定实现多态化,在编译时确定调用同名函数中的哪一个;虚函数是通过动态束定实现多态性,在程序运行时确定调用一族同名函数中的哪一个。
C++ 中类和类模版的关系可以表述为:类是类模版的实例,而类模版是类的抽象
C++ 程序中使用 using namespace std;
的原因是:要使用 std
命名空间中的函数等;使用 #include<iomanip>
是因为要使用 iomanip
头文件中的函数等进行输出格式调整
在 C++ 程序中 cin
是在 iostream
中定义的输入流对象;cout
cerr
和 clog
三者的相同点是向标准输出设备输出
类 A:
A a(1), b; b = a;
用构造函数构造 b 后再对其赋值A a(1), b(a)
用复制构造函数构造 b
包含纯虚函数的类被称为抽象类, 某类中包含一个纯虚函数 int fun();
, 则该成员函数应声明为 int fun() = 0;
运算符重载时要保持运算符操作数的个数、运算符的执行结合性和优先级不变.
非成员函数应声明为类的友元函数才能访问这个类的 private
成员。
用流对象的成员函数控制输出格式时,用于设置字段宽度的流成员函数的名称是 width()
,与之作用相同的控制符名称是 setw
在 C++ 类中,有一种不能定义对象的类,这样的类只能被继承,称之为抽象类, 定义该类至少具有一个纯虚函数.
用 new
申请某一个类的动态对象数组时,在该类中必须能够匹配到没有形参 / 缺省参数的构造函数,否则应用程序会产生一个编译错误。
在基类和派生类中,派生类可以定义其基类中不具备的数据和操作。对两个有相同名字的数据成员进行访问时,如果没有作用域分隔符限定时 ,对此数据成员的访问将出现歧义。
拷贝构造函数使用 引用作为参数初始化创建中的对象。
在 Visual C++ 中,定义重载函数时,应至少使重载函数的参数个数或参数类型不同;在基类和派生类中,成员函数的覆盖是指派生类成员函数与在基类被覆盖的成员函数名、参数个数、参数类型和返回值类型均相同
构造函数与析构函数除功能不同外,在定义形式上,它们的区别还包括构造函数名与类名相同,而析构函数名是在类名前加一个 ~
、 析构函数没有参数、析构函数可以定义为虚函数 。
动态联编要满足两个条件,它们是:被调用的成员函数是虚函数、用指针或引用调用虚函数
在 C++ 类中,const
关键字可以修饰对象和成员函数,const
对象不能被修改 ,const
成员函数不能修改类数据成员
举出 C++ 中两种用户自定义的数据类型:类、枚举 。
C++ 中没有字符串类型,字符串是通过字符数组来表示的,每一个字符串都有一个结尾字符\0
。
C++ 中没有输入输出语句,输入输出是通过输入输出库实现的
举出 C++ 中两种代码复用的方式:继承、模版 。
若程序员没有定义拷贝构造函数,则编译器自动生成一个缺省的拷贝构造函数,它可能会产生什么问题?
当对象含有指针数据成员,并用它初始化同类型的另一个对象时,缺省的拷贝构造函数只能将该对象的数据成员复制给另一个对象,而不能将该对象中指针所指向的内存单元也复制过去。这样,就可能出现同一内存单元释放两次,导致程序运行出错。
〇 简述成员函数、全局函数和友元函数的差别。
(要点如下)
成员函数是在类内部定义的,作用域在类的内部,成员函数可以访问类的数据成员(公有、保护和私有数据成员),可以调用该类的其它成员函数(公有、保护和私有成员函数),可以调用全局函数。
如果友元函数是另一个类的公有成员函数,则该类的成员函数也只能通过那个类的对象调用,不能调用那个类的保护和私有成员函数。非本类成员函数(其它类成员函数或全局函数)可以通过该类的对象访问该类的公有数据成员和调用该类的的公有成员函数。
不是在类中定义的成员函数都是全局函数。
如果某一个函数(全局函数或类的成员函数)定义为另一个类的友元函数,需要在那个类中用 friend
关键字声明,友元函数并不是类的成员,它的定义自然是在那个类的外面。
〇 简述结构化的程序设计、面向对象的程序设计的基本思想。
结构化的程序设计将数据和对数据的操作分离,程序是由一个个的函数组成的;面向对象的程序设计将数据和操作封装在一起,程序是由一个个对象组成的,对象之间通过接口进行通信,它能够较好地支持程序代码的复用。
〇 结构 struct
和类 class
有什么异同?
解答要点:struct
和 class
都可以定义类,但是缺省访问权限说明时,struct
的成员是公有的,而 class
的成员是私有的。在 C++ 中,struct
可被 class
代替。