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. 不用 +、-、*、/
做加法

GO: 奇妙的数学
-> 3.不用加减乘除求两个整数的和

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,布布扣,bubuko.com

时间: 2024-10-02 19:39:29

Chap6: question 46 - 48的相关文章

Compare CN900 with Quickly 4C/4D/46/48

"I have cn900 & works very good, upgrades over the years have been perfect. There web site has a lot of info to help with you with cn900. " Customers from wobd2 the above comments. CN900 Auto Key Programmer Advantage: 1) Can directly copy 4C

结对编程——paperOne基于java web的简易四则运算出题网站

项目成员:张金生     张政 需求分析: 1.要进行四则运算: 2.运算题目随机: 3.进行对错判断: 4.整数运算. 程序概要: 1.用JSP实现: 2.用户可选择题目数量: 3.答题页用表格列出: 4.包含用来填写答案的输入框: 5.答完后点击提交会直接显示相应题目的对错. 实现过程: 数据结构主要用到了数组 题目生成: 1 public String generateQuestion(int numOfOperand, int rangeMin, int rangMax, boolean

paperOne基于java web的简易四则运算出题网站

项目成员:张金生     张政 需求概要 1.运算数均为正整数 2.包含的运算符有+,-,*,/ 3.除法运算结果为整除运算 4.批量生成题目并判题 核心功能分析 1.题目生成——java后端 <待编辑> 2.对用户提交的答案进行评定——javascript前端 <待编辑> 部分功能实现 题目生成 1 public String generateQuestion(int numOfOperand, int rangeMin, int rangMax, boolean isInt,

雅虎公司C#笔试题及参考答案

Question 1. (单选) 在计算机网络中,表征数据传输可靠性的指标是——2 1. 传输率2. 误码率3. 信息容量4. 频带利用率 Question 2. (单选) 以下关于链式存储结构的叙述中哪一条是不正确的?——3 1. 结点除自身信息外还包括指针域,因此存储密度小于顺序存储结构2. 逻辑上相邻的结点物理上不必邻接3. 可以通过计算直接确定第i个结点的存储地址4. 插入.删除运算操作方便,不必移动结点 Question 3. (单选) 以下哪一个不是栈的基本运算——2 1. 删除栈顶

14、DNS正反向解析、主从复制、子域授权、区域转发 学习笔记

DNS:Domain Name Service 监听端口:UDP/TCP 53号端口 实现工具:BIND(Berkeley Internet Name Domain), PowerDNS, dnsmasq FQDN: Full Qualified Domain Name 正向解析:FQDN --> IP 反向解析:IP --> FQDN 查询: 递归查询:recursion用于客户端和本地DNS之间(客户端指向的DNS服务器:一定是允许给本地主机做递归的) 迭代查询:iteration用于本地

.net 综合面试题

想换工作的朋友可以试着做一下:1. CLR.CTS.CLS 分别是什么意思? 公共语言运行库,通用类型系统,公共语言规范2. 什么是基元类型? 由编译器直接支持的数据类型称为基元类型. 例如:C#中的int,string等等就是,实际运行过程中被映射为FCL中对应的类型(java中叫做包装类)如:System.Int32,System.String. ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_fxintro/html/7e4c5921-955d-4b

OCJP(1Z0-851) 模拟题分析(二)

Exam : 1Z0-851 Java Standard Edition 6 Programmer Certified Professional Exam 以下分析全都是我自己分析或者参考网上的,定有疏漏,还请大家对我的分析提出质疑. QUESTION 31 Given:1. interface A { public void aMethod(); }2. interface B { public void bMethod(); }3. interface C extends A,B { pub

第四次考核

码云地址:https://gitee.com/x-alchemist/java_study/tree/master/Exercise4 使用套接写连接编写一个简单的聊天室程序,客户端主函数放在Client_Main.java文件中,服务器端主函数放在Server_Main.java文件中 要求:    1.客户端从控制台进行输入,并将客户端的输出内容和时间保存到"学号.txt"文件中 2.服务器端读取到客户端的程序后,给客户端以回应,并将客户端的输入内容与服务端的输出内容.时间保存到文

泰坦尼克号电影 完整字幕 中英文对比 完整版

0,0:01:50.93,0:01:53.03Thirteen meters. You should see it. 距离13公尺 应该看得见了 0,0:02:05.73,0:02:08.03Okay, take her up and over the bow rail. 越过船头的栏杆 0,0:02:09.53,0:02:12.73Okay, Mir- 2, we're going over the bow. Stay with us. 和平二号 我们要到船头了 跟好 0,0:02:45.63