1. 如下是我们查找数组中某个元素的一种通常做法

  

const int *Find(const int *array, int length, int x)

{

const int *p = array;

for (size_t i = ; i < length; i++)

{

if (*p == x)

{

return p;

}

p++;

}

return ;

}

在这种方法下,我们必须保证数组为int型,知道数组的长度,甚至还要确定整的存在这样一个数组。请你利用template重写此方法来消除所有这些缺陷。

参考:

template<typename T,int n>

const T* find(const T* arr, T x)

{

const T *p = arr;

for (size_t i = ; i < n; i++)

{

if (*p == x)

{

return p;

}

p++;

}

return ;

}

其中怎样保证一个数组存在还是没有十分理解,这样的解法只是根据自己的理解所写,望明白的博友指点,不胜感激。

  1. 假设有如下类
class erp

{

HR* m_hr;

FI* m_fi;

public:

erp()

{

m_hr = new HR();

m_fi = new FI();

}

~erp()

{

}

};

如果new FI()构造器失败,如何检测这个问题并释放已经分配给m_hr的资源?

参考:

使用标准程序库中提供的auto_ptr; auto_ptr是个“类指针(pointer_like)对象”,也就是所谓的“智能指针”,它的析构函数会自动对所指向的对象调用delete,

事实上,以对象管理资源的思想正是C++所倡导的,Effective C++中告诫我们:取得资源的时候正是初始化的时候,即Resource Acquisition Is Initialization

class A

{

HR* m_hr;

FI* f_hr;

public:

A()

{

auto_ptr<HR> a_mhr(new HR());

auto_ptr<FI> a_fhr(new FI());

m_hr = a_mhr.release();   

f_hr = a_fhr.release();

f_hr = new FI();

}

~A()

{

}

};
  1. 有如下类
#include <iostream>

#include <complex>

using namespace std;

class Base

{

public:

Base() { cout << "Base-ctor" << endl; }

~Base() { cout << "Base-dtor" << endl; }

virtual void f(int) { cout << "Base::f(int)" << endl; }

virtual void f(double) { cout << "Base::f(double)" << endl; }

virtual void g(int i = ) { cout << "Base::g()" << i << endl; }

};

class Derived : public Base

{

public:

Derived() { cout << "Derived-ctor" << endl; }

~Derived() { cout << "Derived-dtor" << endl; }

void f(complex<double>) { cout << "Derived::f(complex)" << endl; }

virtual void g(int i = ) { cout << "Derived::g()" << i << endl; }

};

void main(){

Base b;

Derived d;

Base* pb = new Derived;

cout << sizeof(Base) << endl;   //第一步

cout << sizeof(Derived);   //第二步

pb->f(1.0);        //第三步

pb->g();     //第四步

}

请问程序的输出结果是多少?

参考:

第一步,第二步中Base,Derived都是类,都是引用类型,所以相当于一个指针的大小,所以是4位的

第三步由于f中的参数是1.0,而Derived中f的参数是complex<double>类型,不等同与double,也就是f并没有覆盖掉父类Base中的f,其实他们就是两个完全不同的函数,只是名字相同而已。所以执行符合要求的父类Base中的f();

第四步由于g是虚函数,而虚函数为动态绑定的,所以执行D::g(), 但因为在Derived中重新定义了继承而来的缺省参数值,而缺省参数值是静态绑定的,所以i的值获取的是Base中g()的缺省值。

要记住,经验告诉我们,永远不要重新定义继承而来的缺省值。

程序执行结果如图:

  1. 两个人轮流拿10个硬币,每次可拿1,2,4个,拿到最后一个的为输,问有无必胜条

件?

参考:

后拿的人每次只要拿到三的倍数即可。

a. 拿到最后一个的人输,所以自己想法设法让对方给自己留下2,3,5,这样自己就能一招制胜;

b. 基于a,自己拿完后,只能给对方留下1,4,6,7,8,9

c. 如果给对方留下6,对方拿2给自己留4,与b矛盾;如果给对方留8,对方拿4给自己留4也与b矛盾;如果给对方留9,那么对方拿2给自己留7也与b矛盾。

基于abc,理论上讲,先手必输。

  1. 列举C++中四种强制类型转换,并说明区别?

static_cast: 用来强制进行隐式转换,可以实现C++中内置基本数据类型之间的相互转换

但不能将const转换为non-const;

const_cast: 通常被用来将对象的常量性移除,四个运算符中只有它能进行这样的操作;

dynamic_cast: 用于“安全向下转型”,也就是用来决定某对象是否归属继承体系中的某个类型。

其他三种都是编译时完成的,dynamic_cast是运行时处理的,运行时要进行类型检查。被转换的基类中一定要有virtual函数。

reinterpret_cast:  执行低级转型。

  1. 给出如下代码的输出结果:
#include <iostream>

using namespace std;

#define DBL(x) x+x

int main()

{

int a = ;

int b = ;

int c = DBL(a)*DBL(b);

cout << c << endl;

return ;

}

答案:

19

执行结果为3+3*4+4=19

一些值得思考的"小题"一的更多相关文章

  1. 关于SQL的几道小题详解

    关于SQL的几道小题详解 当我们拿到题目的时候,并不是急于作答,那样会得不偿失的,而是分析思路,采用什么方法,达到什么目的,还要思考有没有简单的方法或者通用的方法等等,这样才会达到以一当十的效果,这样 ...

  2. 常让人误解的一道js小题

    一道小题引发的深思 今天无意中看到一个js笔试题,不由得想起初学js那会被各种题目狂虐的心酸,虽说现在也会被笔试题所虐,但毕竟比之前好了很多,下面就是我的个人理解,欢迎拍砖.指正: var x = 1 ...

  3. 一些js小题(一)

    一些js小题,掌握这些对于一些常见的面试.笔试题应该很有帮助: var a=10; function aa(){ alert(a); } function bb(){ aa(); } bb();//1 ...

  4. 关于理解python类的小题

    今天看了python部落翻译的一篇<一道python类的小题>文章,感觉挺有启发性,记录下来: print('A') class Person(object): print('B') de ...

  5. 20181014xlVBA获取小题零分名单

    Sub GetZeroName() Dim Dic As Object Const SUBJECT = "科目名称" Dim Key As String Dim OneKey Di ...

  6. C++中几个值得分析的小问题(2)

    下面有3个小问题,作为C++ Beginner你一定要知道错在哪里了. 1.派生类到基类的引用或指针转换一定“完美”存在? 一般情况,你很可能会认为:派生类对象的引用或指针转换为基类对象的引用或指针是 ...

  7. C++中几个值得分析的小问题(1)

    下面3个小问题都是我认为C++ Beginner应该能够解答或辨别清楚的.希望我们能通过题目挖掘更多的信息,而不仅仅局限在解题.我最喜欢说的话:能力有限,所以作为抛砖引玉,希望共同讨论,指出错误. 另 ...

  8. CF上的3道小题(2)

    CF上的3道小题(2) T1:CF630K Indivisibility 题意:给出一个数n,求1到n的数中不能被2到9中任意一个数整除的数. 分析:容斥一下,没了. 代码: #include < ...

  9. CF上的3道小题(1)

    CF上的3道小题 终于调完了啊.... T1:CF702E Analysis of Pathes in Functional Graph 题意:你获得了一个n个点有向图,每个点只有一条出边.第i个点的 ...

随机推荐

  1. 设计一个算法,输出从u到v的全部最短路径(採用邻接表存储)

    思想:用path数组存放路径(初始为空),d表示路径长度(初始为-1),查找从顶点u到v的最短路径过程如图所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5u ...

  2. Online DDL与pt-online-schema-change

    http://seanlook.com/2016/05/24/mysql-online-ddl-concept/ http://seanlook.com/2016/05/27/mysql-pt-onl ...

  3. sysbench 安装 原创

    1.下载sysbench version 0.5 https://github.com/akopytov/sysbench 2. [root@server1 sysbench-0.5]# pwd/ro ...

  4. Helpers\PHPMailer

    Helpers\PHPMailer PHPMailer is a third party class for sending emails, Full docs are available athtt ...

  5. 一网打尽OkHttp中的缓存问题

    看到很多小伙伴对OkHttp的缓存问题并不是十分了解,于是打算来说说这个问题.用好OkHttp中提供的缓存,可以帮助我们更好的使用Retrofit.Picasso等配合OkHttp使用的框架.OK,废 ...

  6. Android(java)学习笔记111:成员位置的内部类的介绍

    1.内部类的定义 /* 内部类概述: 把类定义在其他类的内部,这个类就被称为内部类. 举例:在类A中定义了一个类B,类B就是内部类. 内部的访问特点: A:内部类可以直接访问外部类的成员,包括私有. ...

  7. jQuery moblie 配合jQuery 实现移动端下拉刷新

    <script type="text/javascript" src="http://bj.jiaju001.com/static/js/jquery-1.9.0. ...

  8. QUI操作超时弹出登录窗口登录的处理方式

    在使用QUI开发的业务系统中,如果长时间没操作,session过期后,再次操作系统超时会自动跳转到登陆页面,如果当前有一些操作没有保存,需要重新登录后再次填写信息,用户体验很不好! 为了避免超时后页面 ...

  9. Java 8 Stream API Example Tutorial

    Stream API Overview Before we look into Java 8 Stream API Examples, let’s see why it was required. S ...

  10. Cisco 交换机的操作

    Cisco的工作模式 Cisco设备有常用模式为:用户模式.特权模式.全局模式.端口模式.首先它们之间呈现出递进关系:用户模式->特权模式->全局模式->端口模式 1.用户模式 交换 ...