c++笔试基础题(4)

1.派生类与基类的转换
答:派生类转换为基类又称为向上转换,它总是隐含进行的,派生类转换为基类总是合法和自动的
。也就是说,派生类总是可以转换为基类的引用类型。如果有一个派生类型的对象,则可以使用它
的地址对基类的指针进行赋值或初始化。同样,可以使用派生的引用或对象初始化基类的引用。
在可以确定基类转换为派生类是安全的情况下,可以使用强制转换完成基类转换为派生类,基类是
不会自动转换为派生类的。基类转换为派生派生类也被称为向下转换。
2.什么是虚成员。有什么作用?
答:虚成员也称为虚函数,虚函数是用于面向对象中实现多态的机制。它核心理念是通过基类访问派
生类定义的函数。虚函数必须是基类的非静态成员函数,它的访问权限可以是protected或者public,
函数如果在基类中声明为虚函数,它就一直为虚函数。派生类也不可以改变。派生类重定义虚函数时,
可以使用virtual保留字,但这不是必须得。
虚函数的作用:虚函数的作用是实现动态解析,也就是在程序的运行阶段动态的选择合适的成员函数,
在定义了虚函数后,可以在基类的派生类中对虚函数重新定义,在派生类中重新定义的函数应与虚函
数具有相同的形参个数和类型,以实现统一的接口,不同的定义过程。事实上,虚函数只是一个工具。
如果在派生类中没有对虚函数重新定义,则它继承基类的虚函数。动态解析规定,只能通过指向基类
的指针或基类对象的引用来调用虚函数。
3.构造函数与析构函数的调用时机。
答:在类的对象首次被使用之前,构造函数将被应用在该对象上,构造函数和析构函数的调用是自动
进行的。建立对象时会调用构造函数,而销毁对象时调用析构函数。全局对象的构造函数在main函数
之前调用,析构函数在main函数执行结束后调用。不同全局变量的构造函数执行顺序与变量定义的顺
序一致,而析构函数调用的顺序正好相反。静态局部变量的析构函数在程序第一次执行到定义静态局
部变量的语句时调用,而析构函数在main函数执行结束后调用。
4.有哪几种继承方式?
答:继承的方式分为公有继承,保护继承和私有继承三种。
5.继承时访问级别如何变化?
答:在C++中,继承是可以降低父类的访问级别的。
公有继承(public):基类成员保持自己的访问级别;
受保护继承(protected):基类的public和protected成员在派生类中为protected成员,基类的private成员保持为private;
私有继承(private)基类的所有成员在派生中为private成员。
如果没有自定义,c++将使用默认继承保护级别,使用class保留字定义的派生类默认具有private继承。
使用strut保留字定义的类默认具有public继承。友元关系是不可以继承的。static成员属于类,而非
对象,在继承层次中只有一个这样的成员,既可以通过基类访问static成员,也可以通过派生类访问。
6.什么时候发生函数覆盖?
函数覆盖的概念:覆盖(Override)是指派生类中如果存在重新定义的函数,其函数名,参数列,返回类
型,必须同父类中的相对应被覆盖的函数严格一致,覆盖函数和被覆盖函数只有函数体不同。当派生类
对象调用子类中该同名函数时会自动调用子类中的覆盖版本,而不是父类中的被覆盖函数版本。
覆盖的使用:覆盖的特征为在不同的范围中(分别位于派生类和基类)的函数,函数名字相同,函数参数
相同,基类函数必须由virtual关键字。
7.如何访问基类的成员?
答:有两种因素同时控制了派生类对基类成员的访问权限,这两个因素就是基类中类成员的访问说明
符,以及派生类的派生方式。在任何派生方式下,基类的私有成员都是派生类不可访问成员;在保护
派生情况下,除私有成员外均被派生以保护成员方式继承,公有派生时,不改变基类公有和保护成员
的访问权限。派生类中的成员函数可以直接访问基类中的public和protected成员,但不能访问基类的
private成员。通过派生类的对象只能访问基类的public成员。
8.什么是深复制与浅复制?
答:浅复制的概念:又称为浅拷贝,指的的是在对象复制时,只是对对象的数据成员进行简单的复制。
深复制又称深拷贝,对于对象中动态成员,就不是仅仅简单的赋值了,而是重新动态分配空间。
如果一个类拥有资源,当这个类的对象发生复制过程的时候,这个过程就可以叫做深复制,如果对象
存在资源但复制过程并未复制资源就是浅复制。
9.什么是复制构造函数?
答:复制构造函数的概念:又称为拷贝构造函数,是一种特殊的构造函数,他由编译器调用来完成
一些基于同一类的其他对象的构建及初始化。在c++中,有三种对象需要复制的情况,这时,复制构
造函数将会被调用。1)一个对象以值传递的方式传入函数体。2)一个对象以值传递从函数返回。
3)一个对象需要通过另一个对象进行初始化。如果前两种情况不适用复制构造函数的时候,就会导
致一个指针指向已经被删除的内存空间。
10.类型转换有哪些分类?
答:在C++中,类型转换有隐式转换和显示转换两种。显示转换也称为强制转换,它具有一定的危险性。
11.什么是类型转换构造函数。
答:类型转换构造函数的概念:类型转换构造函数是一种特殊的构造函数,如果一个类的构造函数只有
一个参数,而且这个参数不是该类的类型,而是其他的类型,这个构造函数就被称为类型转换构造函数。
转换构造函数可以用来处理不同域的同一个数据值。
12.什么是函数?
答:函数由函数名,参数,返回值类型以及一个包含操作语句的语句块组成,函数可以支持重载,程序
就是由函数组成的。
13.形参和实参有什么区别?
答:形参是在函数定义时在形参表中定义的,并且由调用函数时传递给函数的实参所初始化。
形参为函数提供了已经命名的局部存储空间。函数形参表可以为空,但不能省略。
形参是函数定义或声明时的函数形式参数,形参表制定了函数参数的个数和数据类型,实参是
函数调用时传递给函数的参数,传递时要与形参一一对应。
14.c++支持参数个数不确定的函数吗?
答:c++可以通过隐藏参数机制来支持参数个数不确定的函数。
15.什么是内联函数?
答:内联函数的概念:在类的内部定义或类的内部声明,而在外部以inline定义的成员函数叫做内联
(inline)函数。引入内联函数的目的是为了解决程序中函数调用的效率问题。在内联函数的内部允许
用循环语句和开关语句。如果有这些语句,则编译器将该函数视同普通函数那样产生函数调用调用代
码。递归函数是不能用来做内联函数的。
16.什么是容器?
答:就是容纳特定类型的数据的集合。该类型必须具有拷贝构造和可赋值的(基本类型和具有拷贝
函数和赋值函数的类类型)。容器有:1)顺序容器:vector<T>,queue<T>,list<T> 2)关联容器:
set<key>(集合),multiset<key>(多重集合)map<key,T>multimap<key,T>(多重映射) 3)容器适配器
stack<T>(栈) queue<T> (队列) priority_queue<T>
17.什么是泛型编程?
答:泛型编程的概念:以独立于任何特定类型实现的方式编写代码。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值