如何让C++中的类变得不可继承呢?最笨的办法就是人为约定喽~呵呵~再仔细想一想可能会想到如下用法:
class A
{
private:
A(){}
public:
static A * Create();
};
这有点像singleton的使用方法,但是这种模式用在不可继承的类上面就显得有点不伦不类了。我甚至还见有人用template来实现这个,真是鸡肋鸡肋。。。下面介绍两种方法,个人觉得还是比较漂亮的~(以下代码就懒的讲解了,大家自己看吧)
class COrphanTag
{
protected:
COrphanTag(){}
};
class COnly : private virtual COrphanTag
{
public:
COnly(){}
};
class CMore : public COnly
{
public:
CMore(){}
};
int main(void)
{
COnly only;
return 0;
}
但是这个程序在VC6下是可以正常编译通过的,哎,没办法,必须顺着微软来啊,那我们再改改:
class COnly;
class ...
发表评论 »
一、介绍 继Junit CppUnit的成功后, c语言环境下也出现了开发源码的白盒测试用例CUnit。CUnit以静态库的形式提供给用户使用,用户编写程序的时候直接链接此静态库就可以了。它提供了一个简单的单元测试框架,并且为常用的数据类型提供了丰富的断言语句支持。 二、结构框架 在CUnit的主页上可以看到对他结构的简单描述 Test Registry | ------------------------------ | | Suite '1' . . . . Suite 'N' | | ...
发表评论 »
#define FALSE 0
#define TRUE 1
#define N 2 /* 进程数 */
int turn; /* 轮到谁了? */
int interested[N]; /* 所有值初始为0(FALSE)*/
void enter_region(int process) /* 进程号为0或1 */
{
int other; /* 另一个进程的进程号 */
other = 1 - process; /* 另一个进程 */
interested[process] = TRUE; /* 标识出希望进入临界区 */
...
发表评论 »
很多时候我们需要在程序退出的时候做一些诸如释放资源的操作,但程序退出的方式有很多种,比如main()函数运行结束、在程序的某个地方用exit()结束程序、用户通过Ctrl+C或Ctrl+break操作来终止程序等等,因此需要有一种与程序退出方式无关的方法来进行程序退出时的必要处理。方法就是用atexit()函数来注册程序正常终止时要被调用的函数。 atexit()函数的参数是一个函数指针,函数指针指向一个没有参数也没有返回值的函数。atexit()的函数原型是:int atexit (void (*)(void)); 在一个程序中最多可以用atexit()注册32个处理函数,这些处理函数的调用顺序与其注册的顺序相反,也即最先注册的最后调用,最后注册的最先调用。 下面是一段代码示例:
#include // 使用atexit()函数所必须包含的头文件stdlib.h
#include
void terminate()
{
cout
发表评论 »
1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。 2.从标准头文件说起 某企业曾经给出如下的一道面试题:为什么标准头文件都有类似以下的结构?
#ifndef __INCvxWorksh
#define __INCvxWorksh
#ifdef __cplusplus
extern "C" {
#endif
/*...*/
#ifdef __cplusplus
}
#endif
#endif /* __INCvxWorksh */
分析:显然,头文件中的编译宏“#ifndef __INCvxWorksh、#define __INCvxWorksh、#endif” 的作用是防止该头文件被重复引用。
那么
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
的作用又是什么呢?我们将在下文一一道来。
发表评论 »
#include
long a = 10000, b = 0, c = 2800, d, e, f[2801], g;
void main(void)
{
printf("%d", b);
for(; b != c;)
{
f[b] = a / 5;
...
发表评论 »
程序自己打印自己?没搞错吧,这么无聊?呵呵,就是这么无聊,而且不能利用元数据或者文件操作。大家无聊的时候也可以试着想一想,放松放松,娱乐一下。 其实这类程序称为Quine,就是用各种语言来实现自己打印自己,第一个想到这个问题的人一定很无聊,但是第一个想出解的人一定很天才! 以下是一个经典的C语言程序: char*f="char*f=%c%s%c;main(){printf(f,34,f,34,10);}%c";main(){printf(f,34,f,34,10);} 更多请详见Quine主页: http://www.nyx.net/~gthompso/quine.htm
1条评论 »
1. 精确延时 下面是C语言3种单层循环语句的程序代码:
void SingleLoop(unsigned char t)
{
unsigned char x = t, y = t;
do
{
;
} while(--t);
while(x--);
for(; y--; );
}
使用Keil C51 ...
发表评论 »
如何用程序来判断文件的编码呢?以下提供一个判断编码为UTF-8的方法。只需要把文件中的字符串传入函数即可。
bool isUtf8(const char *buf)
{
int i, n;
register unsigned char c;
bool gotone = false;
#define F 0 /* character never appears in text */
#define T 1 /* character appears in plain ASCII text */
#define I 2 /* ...
发表评论 »