- 博客(7)
- 资源 (3)
- 收藏
- 关注
原创 试题:将阿拉伯数字转为罗马数字
在罗马数字中, 利用7个不同字母进行重复或者组合来表达各式各样的数字.I = 1 V = 5 X = 10 L = 50 C = 100 D = 500 M = 1000下面是关于构造罗马数字的一些通用的规则的介绍:1> 字符是叠加的. I表示1, II表示2, 而III表示3. VI表示6(字面上为逐字符相加, "5加1"), VII表示7, VIII表示8
2012-01-31 18:38:17 1746
原创 用placement new修改对象
#include #include using namespace std;struct Name{ Name(const char * name = "") { int size = strlen(name); if (size > 19) { size = 19; }
2012-01-16 17:51:11 603
原创 自定义类的大小比较重载的两种方式
方式一:#include using namespace std;struct Number{public: Number(int a, int b, int c) : first(a), second(b), third(c) { } Number(const Number & rhs) : firs
2012-01-06 18:17:36 1035
原创 试题:两个基类有同名的虚函数要实现, 怎么办?
先把问题陈述一下:有两个类A, B, 它们可能是别人实现的(或是别人提供的库中的类), 很复杂且已经在用, 你不能修改他们, 你想写一个类C同时具有这两个类的特性, 因为自己实现它代价实在是太大, 所以你想到用C继承A, B以达到效果, 但是有一个问题, A, B具有一个同名的虚函数, 你在C中怎么重新实现这个虚函数呢? 先看下面的代码:#include #include usin
2012-01-06 11:35:38 3404 3
原创 试题:编译期确定template <typename U, typename V>中U, V是否为同类型
我们知道int array[sizeof(int)];之所以能正常编译是因为sizeof(int)的结果在编译期就会被确定下来另外, int array[sizeof(0)];也可以正常编译, 因为sizeof的真正操作"参数"是类型, 不是值, 所以这句对编译器来说就是前面那句我们先定义一个函数:int getzero() { return 0; }, 我们再定义array如右: i
2012-01-04 19:58:00 1174 2
原创 试题:实现一个不能被继承的类(续之下)
分析: 代码之所以不能通过编译是因为A中的typedef晚于FinalMaker中对A::RawType的引用, 所以我们要有方法更早的引用到A::RawType, 所以我让A又继承了Template, 并把typedef写在Template中, 这样A就会继承下这个typedef, 又考虑到构造函数的继承顺序, 所以Template应被先继承, 且应该被virtual的方式继承:template
2012-01-04 19:49:20 624 1
原创 试题:实现一个不能被继承的类(续之上)
我在: 试题:实现一个不能被继承的类(上)中有如下代码: template class FinalMaker { private: ~FinalMaker() { } friend class T; }; class A : virtual public FinalMaker { }; ...
2012-01-04 19:42:45 580
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人