C++面试题整理:
1、什么是深拷贝?什么是浅拷贝?
答:浅拷贝仅仅是对对象的引用,而没有深层次的拷贝对象的值,两个对象指向同一个内存地址,当修改其中一个对象的值时候,另一个对象的值也会发生改变;
深拷贝不仅拷贝数据类型和类型对象的值,还会给对象申请存储空间,当修改其中一个对象的值的时候,另一个对象的值不会发生改变。
2、重载和重写的区别?
答:重载:是指C++允许在同一作用域内,某个函数或运算符指定多个定义,则函数重载或运算符重载。
函数重载:函数名相同,形参类型、个数、排列顺序不同。
(简单讲就是,重载是在一个类中,函数名一样,参数类型或参数个数不同的一系列同名函数)
重写(覆盖):是指派生类中存在重新定义的函数。其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致。只有函数体不同(花括号内)。
派生类调用时会调用派生类的重写函数,不会调用被重写函数。重写的基类中被重写的函数必须有virtual修饰。
两者的区别:
(1)范围区别:重写和被重写的函数在不同的类中(基类和派生类),重载和被重载的函数在同一类中。
(2)参数区别:重写与被重写的函数参数列表一定相同,重载和被重载的函数参数列表一定不同。
(3)virtual的区别:重写的基类必须要有virtual修饰,重载函数和被重载函数可以被virtual修饰,也可以没有
3、多态是什么?运行时多态的理解。
答、C++的多态:在基类的被重写函数之前,加上关键字virtual, 并且在派生类中重写该函数, 运行时根据对象的实际类型来调用相应的函数。
若对象类型是派生类,就调用派生类的函数;若对象类型是基类,就调用基类的函数。
运行时的多态:(通过虚函数体现)运行期多态的实现依赖于虚函数机制。当某个类声明了虚函数时,编译器将为该类对象安插一个虚函数表指针,并为该类设置一张唯一的虚函数表,虚函数表 中存放的是该类虚函数地址。运行期间通过虚函数表指针与虚函数表去确定该类虚函数的真正实现。
编译时的多态:通过函数和运算符的重载体现
: