一、简答题
1、C语言与C++语言的区别?
答: C语言是面向过程语言,C++是面向对象语言(OOP)
C语言使用函数来实现模块化程序设计,而C++使用类来实现模块化程序设计
2、解释类和对象的关系,并举例说明
答: 类是对象的抽象,对象是类的具体实例
学生是张三的类型,张三是一个具体的学生
class Student{}; Student zhangsan;
3、一个类由几部分成员构成?
答: 两部分,成员变量和成员函数
4、构造函数有什么作用?
答: 初始化数据成员
5、简述构造函数的特点?
答: (1)必须公有 (2)函数名和类名一样 (3)无返回值 (4)可以带参数初始化数据成员
6、什么是默认构造函数?
答: 构造函数不带参数或带参数参数都有默认值
7、程序员在定义类时是否必须写一个构造函数,为什么?
答:不是,如果程序员没有显式声明一个构造函数,那么编译器自动提供默认构造函数
8、什么是函数重载,并举例说明?
答: 函数名一样 参数列表不一样 void f(); void f(int a); void f(int a,int b);
但是只是返回值类型不一样,不能是函数的重载 int f(); void f();
9、什么是初始化列表,有什么作用,什么情况下必须使用初始化列表?
答:初始化数据成员,const和引用类型
10、什么是const成员函数,它有什么作用,通常情况下哪些函数会是const成员函数?
答:void print()const; 函数体内不能修改成员变量的值, print函数和get函数
11、析构函数有什么作用,析构函数在什么情况下会被调用
答:释放对象占用的内存空间,对象被销毁时或离开它的作用域
12、一个类是否必须要定义一个析构函数,什么情况下必须要写析构函数?
答:类中有指针成员变量指向堆空间,此时必须定义一个析构函数来释放指针指向的堆空间,避免内存泄露
13、什么是浅拷贝,浅拷贝会产生什么问题?
答:两个对象的指针指向同一块堆空间,浅拷贝会产生两个问题: (1) 改变其中一个,另一个也跟着改变
(2) 容易造成二次删除
14、什么是函数链,使用函数链需要注意什么问题
答:函数调用函数 middle(p,q).print(); 前一个函数的返回值必须是一个对象
15、能否返回一个指向局部变量的指针或引用,为什么?
答:不能, 局部变量在函数结束后内存空间就被回收,指针会变成野指针,引用将是一个无效的引用
16、Point middle(const Point & p1,const Point & p2);解释该函数的参数中加const和&的作用是什么?
答:const的作用:不能修改形参的值
&的作用:节省内存空间,提高效率
17、什么是this指针,解释对象调用成员函数时传递对象的过程
答:this指针指向对象自身,对象调用成员函数时,会默认将对象自身传递给该函数,在函数体内不直接使用对象名,而是使用this指针,即this指针是指向该对象,指向调用者
18、静态局部变量和局部变量的区别,静态局部变量和静态全局变量的区别(生命周期和作用范围分析)
答:作用域:只能在块中或函数体内
生命周期:静态局部变量在整个程序运行期间,局部变量函数结束后就被回收
存储区:静态局部变量存储在静态存储区,而局部变量存储在栈区
19、简述类的普通成员变量和静态成员变量的区别
答:每一个对象都会为它的普通成员变量在内存中保留一块空间来存储它的值,而对于静态成员变量整个类中只有一份拷贝,所有的对象都共享这块空间
20、调用类的静态成员的两种方式是什么?
答:(1)类名+作用域 Student::teacherName
(2)对象.语法 Student s1; s1.teacherName; 推荐使用第一种方式,因为静态成员属于整个类的
21、使用类的静态成员变量时需要注意什么问题
答:必须在类外初始化
22、类的静态成员函数和普通成员函数的区别
答:静态成员函数只能访问静态成员,不能访问非静态成员
而普通成员函数既可以访问静态成员,也可以访问非静态成员
23、友元函数有什么作用
答:可以访问类的私有成员
24、使用友元函数的优缺点是什么
答:提高了程序的性能,但是破坏了封装性
25、什么是操作符重载,为什么要重载操作符?
答:使用操作符操作非默认类型(用户自定义类型,类类型)的操作数
让操作符可以直接操作对象
26、为什么要实现两个版本下标重载?
答:const版本给const对象使用,一般用于读取值
非const版本一般用于修改输入值
27、简述浅拷贝与深拷贝的区别
答:浅拷贝是两个指针指向同一块空间
深拷贝两个指针指向各自独立的空间,互相不影响
28、赋值运算符重载的五步?
答:1.避免自赋值 2.删除旧空间 3.开辟新空间 4.拷贝内容 5.返回*this
29、C++中什么时候会调用拷贝构造函数
答: (1)用一个已存在的对象来初始化另一个对象 A a=b; A a(b);
(2) 以传值的形式给函数传递一个对象或从函数返回一个对象
30、C++的空类,编译器会默认提供哪些成员函数?
答:三大件+默认的构造函数