不定项选择题
1、下列对面向接口、面向对象、面向方面编程阐述正确的是:ACD
A、面向接口更关注的是概念,它的原则是先定义好行为规范,再根据行为规范创建实现。
B、面向对象是对复杂问题的分解,实现依赖于具体实现。
C、面向对象的实现依赖于抽象,而抽象不依赖于具体实现。
D、面向方面关键思想是“将应用程序中的商业逻辑与对其提供支持的通用服务进行分离”。
2、下列对强类型与弱类型阐述错误的是:C
A、强类型是在编译的时候就确定类型的数据,在执行时类型不能更改。
B、弱类型在执行的时候才会确定类型。
C、强类型安全,但效率较低。
D、弱类型在运行的时候容易出现错误,但它灵活,多用于解释型编程语言。
3、设计模式中,下列属于行为型模式的是:ABC
A、观察者模式,模板方法模式 B、状态模式,访问者模式
C、备忘录模式,迭代器模式 D、命令模式,原型模式
4、下列运算符中不能被重载的是:B
A.+ B.:: C.= D.++
5、下列关于构造函数的描述中,错误的是:D
A.构造函数可以设置默认参数;
B.构造函数在定义类对象时自动执行;
C.构造函数可以是内联函数;
D.构造函数不可以重载;
6、有段代码:
class BASE
{
char c;
public:
BASE(char n) :c(n) {}
virtual ~BASE() { std::cout << c; }
};
class DERIVED :public BASE
{
char c;
public:
DERIVED(char n) :BASE(n+1), c(n) {}
~DERIVED() { std::cout << c; }
};
int main()
{
DERIVED('X');
return 0;
}
执行上面的程序将输出:B
A.XY B.YX C.X D.Y
7、应在下列程序划线处填入的正确语句是:C
class Base
{
public:
void fun(){cout<<“Base::fun”<<endl;}
};
class Derived:public Base
{
public:
void fun()
{
__________;//显示调用基类的函数fun();
cout<<"Derived::fun"<<endl;
}
};
A. fun(); B.Base.fun(); C.Base::fun(); D.Base->fun();
填空题
1、多线程编程要确保并发程序正确地执行,必须要保证原子性、可见性以及_____(答案:有序性),
缺一不可,不然就可能导致结果执行不正确。
2、工厂模式设计中,(答案:工厂方法)模式只有一个抽象产品类,而(答案:抽象工厂)模式有多个。
3、C++中的域如果没有被显式地初始化,其初值为_______________________。(答案:该类型的默认值,或者随机值)
4、C++中无需编写任何代码就能将byte型数值转换为int型数值,称为_______。(答案:隐式转换)
5、为防止在类对象进行隐式转换调用构造函数,需要使用关键字_______。(答案:explicit)
6、C++中的方法重载是指类的两个(含)以上的方法同名,但______(答案:形式参数)列表不同的情况。
7、C++类中没有定义的话,会默认定义的函数有:、、、。(默认构造函数,默认拷贝构造函数,默认赋值构造函数,默认析构函数)。
8、C++面向对象的三大特征为__________/__/。(答案:多态,封装,继承)。
简答题
1、简单说一下为什么有些析构函数设置为虚函数?构造函数有虚函数方式吗?
将可能会被继承的父类的析构函数设置为虚函数,可以保证当我们new一个子类,然后使用基类指针指向该子类对象,释放 基类指针时可以释放掉子类的空间,防止内存泄漏。
构造函数没有虚函数的方式;
vptr指针指向虚函数表,执行虚函数的时候,会调用vptr指针指向的虚函数的地址。
当定义一个对象的时候,首先会分配对象内存空间,然后调用构造函数来初始化对象。vptr变量是在构造函数中进行初始化的。又因为执行虚函数需要通过vptr指针来调用。如果可以定义构造函数为虚函数,那么就会陷入先有鸡还是先有蛋的循环讨论中。
2、列举你知道UI方面的库或者架构。
1.MFC;2.Qt;3.其他可以列举出的库;
3、线程池是什么?大概的原理描述一下。
线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。
4、智能指针是什么?内部原理是什么?
智能指针主要用于管理在堆上分配的内存,它将普通的指针封装为一个对象。当对象的生存周期结束后,会在析构函数中释放掉申请的内存,从而防止内存泄漏。
采用引用计数的方法,记录当前内存资源被多少个智能指针引用。该引用计数的内存在堆上分配。当新增一个时引用计数加1,当过期时引用计数减一。只有引用计数为0时,智能指针才会自动释放引用的内存资源。
5、讲一下C++和VC++的区别。
C++是一种编程语言;
VC++是微软公司提供的一种免费试用的C++开发工具,或者开发工具集;
6、公司内部有5种数据格式,每种数据格式不同,需要封装成统一的对外服务接口,这个怎么设计,写出大概思路即可;
7、请列举你所知道的编程规范。
8、请简单列举你所知道的C++第三方库的名称;
9、请列举你熟知常用的设计模式;
程序题
1、请写出strcpy的实现;
char * strcpy(char *dst,const char *src)
{
assert(dst != NULL && src != NULL);
char *ret = dst;
while ((*dst++=src++)!=’\0’);
return ret;
}
2、请使用RAII来实现控制FILE指针的初始和释放,用来完成对文件string file_path的操作;
class File_ptr
{
public:
File_ptr(std::string file_path,char mode)
{
fp = fopen(file_path.c_str(),mode);
}
~File_ptr()
{
fclose(fp);
}
private:
FILE fp;
};
3、请使用2)中的文件读写代码,实现一个读文件,从中获取1000字节数据,然后写到一个D:\out.dat文件中的代码;