一些值得思考的"小题"一
- 如下是我们查找数组中某个元素的一种通常做法
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 ;
}
其中怎样保证一个数组存在还是没有十分理解,这样的解法只是根据自己的理解所写,望明白的博友指点,不胜感激。
- 假设有如下类
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()
{
}
};
- 有如下类
#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()的缺省值。
要记住,经验告诉我们,永远不要重新定义继承而来的缺省值。
程序执行结果如图:

- 两个人轮流拿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,理论上讲,先手必输。
- 列举C++中四种强制类型转换,并说明区别?
static_cast: 用来强制进行隐式转换,可以实现C++中内置基本数据类型之间的相互转换
但不能将const转换为non-const;
const_cast: 通常被用来将对象的常量性移除,四个运算符中只有它能进行这样的操作;
dynamic_cast: 用于“安全向下转型”,也就是用来决定某对象是否归属继承体系中的某个类型。
其他三种都是编译时完成的,dynamic_cast是运行时处理的,运行时要进行类型检查。被转换的基类中一定要有virtual函数。
reinterpret_cast: 执行低级转型。
- 给出如下代码的输出结果:
#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
一些值得思考的"小题"一的更多相关文章
- 关于SQL的几道小题详解
关于SQL的几道小题详解 当我们拿到题目的时候,并不是急于作答,那样会得不偿失的,而是分析思路,采用什么方法,达到什么目的,还要思考有没有简单的方法或者通用的方法等等,这样才会达到以一当十的效果,这样 ...
- 常让人误解的一道js小题
一道小题引发的深思 今天无意中看到一个js笔试题,不由得想起初学js那会被各种题目狂虐的心酸,虽说现在也会被笔试题所虐,但毕竟比之前好了很多,下面就是我的个人理解,欢迎拍砖.指正: var x = 1 ...
- 一些js小题(一)
一些js小题,掌握这些对于一些常见的面试.笔试题应该很有帮助: var a=10; function aa(){ alert(a); } function bb(){ aa(); } bb();//1 ...
- 关于理解python类的小题
今天看了python部落翻译的一篇<一道python类的小题>文章,感觉挺有启发性,记录下来: print('A') class Person(object): print('B') de ...
- 20181014xlVBA获取小题零分名单
Sub GetZeroName() Dim Dic As Object Const SUBJECT = "科目名称" Dim Key As String Dim OneKey Di ...
- C++中几个值得分析的小问题(2)
下面有3个小问题,作为C++ Beginner你一定要知道错在哪里了. 1.派生类到基类的引用或指针转换一定“完美”存在? 一般情况,你很可能会认为:派生类对象的引用或指针转换为基类对象的引用或指针是 ...
- C++中几个值得分析的小问题(1)
下面3个小问题都是我认为C++ Beginner应该能够解答或辨别清楚的.希望我们能通过题目挖掘更多的信息,而不仅仅局限在解题.我最喜欢说的话:能力有限,所以作为抛砖引玉,希望共同讨论,指出错误. 另 ...
- CF上的3道小题(2)
CF上的3道小题(2) T1:CF630K Indivisibility 题意:给出一个数n,求1到n的数中不能被2到9中任意一个数整除的数. 分析:容斥一下,没了. 代码: #include < ...
- CF上的3道小题(1)
CF上的3道小题 终于调完了啊.... T1:CF702E Analysis of Pathes in Functional Graph 题意:你获得了一个n个点有向图,每个点只有一条出边.第i个点的 ...
随机推荐
- 【Github教程】史上最全github用法:github入门到精通
原文 http://www.eoeandroid.com/thread-274556-1-1.html [初识Github] 首先让我们大家一起喊一句"Hello Github". ...
- mybatis0210 mybatis和ehcache缓存框架整合
.1mybatis和ehcache缓存框架整合 一般不用mybatis来管理缓存而是用其他缓存框架在管理缓存,因为其他缓存框架管理缓存会更加高效,因为别人专业做缓存的而mybatis专业做sql语句的 ...
- Linux 学习笔记 cp 和 ln
最近在重温大学的经典课程:Linux.每天工作之余的时间,坐在家里的阳台上,简简单单的纪录一些基本的知识点,对我来说,既温暖又难得. 有朋友问我关于cp和ln建立符号链接(软链接)和硬链接的一些问题, ...
- python multiprocess不能完全关闭socket的验证
近日项目有原来的多线程升级成为多进程模型后,但出现了个问题,在持续运行一天左右系统处理能力开始变慢,并不时打印以下信息: too many opened files 修改ulimit中open fil ...
- Android 高级UI设计笔记09:Android如何实现无限滚动列表
ListView和GridView已经成为原生的Android应用实现中两个最流行的设计模式.目前,这些模式被大量的开发者使用,主要是因为他们是简单而直接的实现,同时他们提供了一个良好,整洁的用户体验 ...
- git workflows
https://www.atlassian.com/git/tutorials/comparing-workflows Comparing Workflows The array of possibl ...
- Apache服务器中配置虚拟机的方法
新浪微博虚拟机开发配置步骤及介绍.1.由于后面虚拟机中需要用到Rewrite所以先编辑Apache的conf目录下的httpd.conf文件.(可根据实际需要操作)添加mod_rewrite.so模块 ...
- VMware系统运维(二)安装Microsoft .NET 3.5
1.安装vmware vSphere 5.5 之前先安装Microsoft .NET 3.5. 2.安装Microsoft .NET3.5,添加角色和功能. 3.勾选.NET Framework 3. ...
- 转:Nginx RTMP 功能研究
看点: 1. Nginx 配置信息与使用. (支持 rtmp与HLS配置) 2. 有ffmpeg 编译与使用, 命令行方式来测试验证客户端使用. 转自:http://blog.cs ...
- 执行asp.net上传下载Excel时出现“未在本地计算机上注册“Microsoft.ACE.Oledb.12.0”提供程序。(System.Data)”错误
服务器没有安装Office导致的错误,如何不想安装庞大的Office,可以下载安装: Microsoft Office Access Database Engine 2007 http://downl ...