Chap6: question 46 - 48
46. 求 1+2+ … +n。
要求:不用乘除法、for、while、if、else、switch、case 以及条件判断语句(A?B:C)。
a. 利用构造函数求解
#include <iostream>
using namespace std; class Sum{
public:
Sum() {++n; sum += n;}
static void reset() {sum = n = 0;}
static int getSum(){ return sum;}
private:
static int n;
static int sum;
};
int Sum::n = 0;
int Sum::sum = 0; int solution(int n)
{
Sum::reset();
Sum *p = new Sum[n];
delete[] p;
return Sum::getSum();
} int main()
{
cout << solution(100) << endl;
cout << solution(1000) << endl;
cout << solution(100) << endl;
return 0;
}
b. 利用虚函数或函数指针求解
#include <iostream>
using namespace std;
class Base;
class Base* A[2];
class Base{
public:
virtual int sum(int n) { return 0; }
};
class Dirived: public Base{
public:
int sum(int n)
{
return A[!!n]->sum(n-1) + n;
}
};
int main()
{
A[0] = new Base;
A[1] = new Dirived; cout << A[1]->sum(100) << endl;
cout << A[1]->sum(1000) << endl;
cout << A[1]->sum(100) << endl;
return 0;
}
利用函数指针
#include <iostream>
using namespace std; typedef int (*F)(int n);
F A[2];
int fun1(int n)
{
return 0;
}
int fun2(int n)
{
return A[!!n](n-1) + n;
} int main()
{
A[0] = fun1;
A[1] = fun2;
cout << A[1](100) << endl;
cout << A[1](1000) << endl;
cout << A[1](100) << endl;
return 0;
}
c. 利用模板类型和枚举类型求解(编译器完成工作)
#include <iostream>
using namespace std; template<size_t N>class A{
public:
enum { N = A<N-1>::N + N};
}; template<>class A<1>{
public:
enum { N = 1};
}; int main()
{
const int n = 100;
cout << A<n>::N << endl;
cout << A<500>::N << endl;
/* cout << A<1000>::T.N << endl;*/ // not support too long like 1000
return 0;
}
47. 不用 +、-、*、/ 做加法
48. 不能被继承的类
有缺陷的方法1:
class A{
public:
static A* getInstance() { return new A; }
static void deleteInstance(A *rhs) { delete[] rhs;}
private:
A(){}
~A(){}
};
缺点:使用麻烦,且只能得到位于堆上的实例。
方法2:利用虚拟继承。
template<typename T>class Help
{
friend T;
private:
Help(){}
~Help(){}
};
class A : virtual public Help<A>
{
public:
A(){}
~A(){}
};
如上,类 A 可以很方便的声明对象; 同时它是虚拟继承,故若有类继承它,则直接调动 Help 构造函数,导致编译失败。
注: GCC不支持模版参数类型作为友元类型。
Chap6: question 46 - 48的更多相关文章
- 1Z0-050
QUESTION 13 View the Exhibit.Examine the following command that is executed for the TRANSPORT table ...
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q45-Q48)
Question 45 You are designing a branding strategy for a customer with a new SharePoint 2010 server f ...
- 你真的懂了R中的stem函数是如何绘制茎叶图的么?
本文原创,转载请注明出处,本人Q1273314690(交流学习) 哭晕 你真的学会了stem()函数了吗? stem()函数的使用方法是: stem(x, scale=1,width=80, at ...
- OCJP(1Z0-851) 模拟题分析(二)over
Exam : 1Z0-851 Java Standard Edition 6 Programmer Certified Professional Exam 以下分析全都是我自己分析或者参考网上的,定有 ...
- 雅虎公司C#笔试题及参考答案
Question 1. (单选) 在计算机网络中,表征数据传输可靠性的指标是——21. 传输率2. 误码率3. 信息容量4. 频带利用率Question 2. (单选) 以下关于链式存储结构的叙述中哪 ...
- 【Java】-NO.20.Exam.1.Java.1.001- 【1z0-807】- OCEA
1.0.0 Summary Tittle:[Java]-NO.20.Exam.1.Java.1.001-[1z0-807] Style:EBook Series:Java Since:2017-10- ...
- Exam E05-001 Information Storage and Management Version 3 Exam
Emc 考试 e05-001信息存储和管理版本3考试 [总问题:171] 哪种 emc 产品提供软件定义的存储基础架构的自动监视和报告? A. viprSrmB. 斯纳普内C. 阿瓦马尔D. 快速副总 ...
- 结对编程——paperOne基于java web的简易四则运算出题网站
项目成员:张金生 张政 需求分析: 1.要进行四则运算: 2.运算题目随机: 3.进行对错判断: 4.整数运算. 程序概要: 1.用JSP实现: 2.用户可选择题目数量: 3.答题页用表格列出 ...
- django应用的测试
本文章默认用户使用win10系统,并且已经安装pycharm.git.django2.2.5及配套第三方库(python3.6.0及以上版本,且为anaconda环境) 前言 其实在上一期django ...
随机推荐
- Leetcode 155 Min Stack 小顶堆+栈,优先队列实现 难度:0
https://leetcode.com/problems/min-stack/ #include <vector> #include <queue> #include < ...
- Java设计模式系列3--抽象工厂模式(Abstract Factory Method)
2014-02-26 10:55:47 声明:本文不仅是本人自己的成果,有些东西取自网上各位大神的思想,虽不能一一列出,但在此一并感谢! 工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果 ...
- IDH2.5.1. Pain Points
1. On Redhat 6.2 after uninstalling a cluster, and re-install IDH 2.5.1, you meet a "can not wr ...
- Linux学习 : 裸板调试 之 配置使用NAND FLASH
关于NAND FLASH的结构是以页为单位写,以块为单位来擦除: 1Gb 为大页 page=2048Kb BLOCK=128K 512Mb 为小页 page=512byte ...
- python3+任务计划实现的人人影视网站自动签到
python3+任务计划实现的人人影视网站自动签到 这是一个自动化程度较高的程序,运行本程序后会从chrome中读取cookies用于登录人人影视签到, 并且会自动添加一个windows 任务计划,这 ...
- javaEE(web)SEO优化 Yahoo军规
javaEE(web)SEO优化 Yahoo军规 1.尽可能减少HTTP请求数2.使用CDN3.添加Expire/Cache-Control头4.启用Gzip压缩5.将CSS房在页面最上方6.将Scr ...
- Winform基础知识
1.关于登陆部分 this.DialogResult = DialogResult.OK; this.Close(); FrmLogin login = new FrmLogin(m_CurUser) ...
- 电子词典的相关子函数db.c程序
整个电子词典是分块做的:包含的Dic_Server.c,Dic_Client.c,db.c,query.c,xprtcl.c,dict.h,xprtcl.h,dict.txt(单词文件) 下面是db. ...
- public static void main(String[] args){}函数理解
主函数的一般写法如下: public static void main(String[] args){…} 下面分别解释这些关键字的作用: (1)public关键字,这个好理解,声明主函数为publi ...
- 修改crontab默认的编辑器
1.crontab默认的编辑器为nano; 2.修改为vi或其他编辑器 export EDITOR="/usr/bin/vim" ; crontab -e