C++笔试题(十二).金山

8.(单选)下列函数中,哪个不是

void Fun(int m,int& n)
的函数重载 

A. void Fun(int  , int *)
B. void Fun(int& m, int& n)
C. void Fun(const int m, int& n)
D. void Fun(int m,const int&n)


编程题:

3.  STL中有位操作的bitset, 但是它定义的时候必须指定大小,比如下面这段程序,设置了位置2的布尔值为true,输出结果为“0 0 1 0 0”

std::bitset<5> x(0);//初始化5个位置都为0
x.set(2);
for(size_t i = 0 ; i < 5; i++)
{
        std::out<<x[i]<<" ";
}
现在实现一个类BitSetX比bitset更好用,容量能按需增长,要求取布尔值时尽可能的快。

class BitSetX
{
	public:
		void set(int nPos);
		void set(int nFrom,int nTo);
		void reset(int nPos);
		void reset(int nFron,int nTo);
		bool get(int nPos) const;
	protected:
};


四. 实现一种智能指针类,类名定为 KsoPointer, 在我们的架构中,普通对象(下文用Object泛指)的类都继承自同一个类KsoObject, 但是Object的实际类名和实现是不确定的,KsoPointer对象持有Object对象实例的指针(以下用object_pointer代指)

实现需求:在一个进程环境中,Object对象实例在析构后,所有KsoPointer的使用者(拥有KsoPointer对象实例)都能通过“KsoPointer的特定成员函数”判断object_pointer已经无效了,避免使用了已经析构的object_pointer导致程序崩溃


要求:

1)实现KsoPointer类的构造函数和operator =, 需要支持通过Object的引用或指针来构造和赋值

2)实现Ksopinter类的operator ->, operator *, 让使用者使用KsoPointer跟直接使用object_pointer一样

3)KsoPointer类要实现需求中的“KsoPointer的特定成员函数”

4)实现需求中所描述的机制

请写出KsoPointer和KsoObject的实现代码,以下是简要代码,请写出完整的实现:

class KsoObject
{
	//其余代码实现	
};
class KsoPointer
{
	KsoObject *obj;//上文中所说 
};


解析:首先才发现自己学习C++一个不清楚的地方,就是delete一个指针之后,该指针不是为NULL,该指针的值依然没变(也就是说指针指向的那块内存地址依然没变),只是告诉操作系统这个内存可以使用,因此delete之后,该指针就变成了一个野指针。那么我们要如何判断一个野指针是否被delete过呢?——那么应该是要基于引用计数规则了。

5. 



解析:

当时考试的时候,就无脑枚举,使用了2重256的循环,后来经同学指点,知道了大概如何优化:

首先,十个数字,分成了4段,那么一定是有2个三位数,2个二位数

其次,有2个三位数的话,那么一定其中一个是 200+,另外一个是 100+,也就是说十进制中1和2都被占用了,那么 200+ 对应的二进制的对称的数 肯定是一个奇数,

然后,我们就可以直接从 200+ 这个地方去搜索

最后,找到了这么一组数字 A.B.C.D, 根据排列组合的原理,我们就可以知道剩下的7个组合了。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33826977/article/details/78067579
个人分类: 笔试,面试集锦
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭