- 浏览: 342326 次
- 性别:
- 来自: 福建福州
最新评论
-
jw72jw:
最后这个是打表求值
LUA源码分析三:table分析(1) -
dyllove98:
"一些非常重要的问题,涉及面少。那这个时候,我更崇尚 ...
乱写:团队里的独裁和民主一点看法 -
jvmlover:
被踩10次了,什么思想感情啊。
LUA源码分析三:table分析(1) -
chenchenfly99:
chenchenfly99 写道
MMO游戏终极内测开服一周,问题记录 -
chenchenfly99:
...
MMO游戏终极内测开服一周,问题记录
文章列表
#include <iostream>
#include<stdlib.h>
using namespace std;
#define LOOP 10000
int main()
{
int rgnC=0;
for(int i=0; i<LOOP; i++)
{
int x=rand();
int y=rand();
if(x*x+y*y<RAND_MAX*RAND_MAX)
rgnC++;
}
p ...
- 2008-02-19 18:53
- 浏览 1780
- 评论(2)
条款22: 尽量用“传引用”而不用“传值”
这章讲的东西基本都在掌握范围内,简单概括下
首先是效率问题
比如
class person {
public:
person(); // 为简化,省略参数
//
~person();
...
private:
string name, address;
};
class student: public person {
public:
student(); ...
防止你做错事的冲动"const"!!
先提下有个陷阱,比如
typedef pC char*
void f1(pC const p)//好象是反的,记不清了
并不是所希望的char* const //指针常量,而是const char *p //常量指针;
例子好象是这样的吧,可以搜索typedef陷阱关键字。
那么在函数接口中像
class widget { ... };
void f1(const widget *pw); // f1取的是指向
// widget常量对象的指针
voi ...
#include <vld.h>
#include <queue>
#include <iostream>
#include <iomanip>
#include "_CRandom.h"
using namespace std ;
/*
* 描 述:在早期计算中,常用排序机来对一组穿孔卡片排序。即排序机上有十个箱子,把数放入,排序后拿出
* 假定卡片上的数为两位整数,范围为00~99。
* 排序机有十个箱子,编号0~9。排序机处理卡片两遍,第1遍处理个位数,第2遍处理十位数。
* 比如编号1里面放十位数 ...
http://centos.ustc.edu.cn/CentOS-4.4.ServerCD-i386.iso
http://centos.ustc.edu.cn/centos/
rpm命令
http://www.linuxsir.org/main/?q=node/50
- 2008-02-08 16:30
- 浏览 1796
- 评论(3)
条款20: 避免public接口出现数据成员
其实我以前一直不明白,为什么数据成员放在PRIVATE里面,不让外面直接访问;为什么JAVABEAN要那么严格规定。发现自己对
实例了解太少了。
一个非常非常简单的例子
class speeddatacollection {
public:
void addvalue(int speed); // 添加新速度值
double averagesofar() const; // 返回平均速度
};
假设是一个监视器。需要监视每辆车的速度,然后算出平均速度,如果通过一个函数作为介质可以有两种方案:
1。申明一个变量 ...
条款19: 分清成员函数,非成员函数和友元函数
很前几章一样,先提供一个类的代码
//伪代码
class rational {
public:
rational(int numerator = 0, int denominator = 1);
int numerator() const;
int denominator() const;
const rational operator*(const rational& rhs) const;
private:
...
};
class rational //有理数
{
public:
...
#include <iostream>
#include <assert.h>
#include <vld.h> //visual leak detected
//经visual leak detected测试,工作良好,无内存泄露
using namespace std ;
class base
{
public:
base();
base(int pi);
virtual ~base();
base(base& rhs); //拷贝
base& op ...
- 2008-02-03 19:38
- 浏览 1037
- 评论(0)
条款15: 让operator=返回*this的引用
这里的描述不想太多
标准格式是
string& operator=(const string& rhs);
尝试下const string& operator=(const string& rhs);
如果是 int i1, i2, i3;
(i1=i2)=i3; //i3给i1出错
string& operator=(string& rhs);
对普通的类型可以,但是如果是常数呢?
x = "hello";
这里的hello必须是个const的临时对象
最大的争论是对 ...
条款14: 确定基类有虚析构函数
对于这个问题来说,我想直接举这个例子就比较好解释了。
class enemytarget {
public:
enemytarget() { ++numtargets; }
enemytarget(const enemytarget&) { ++numtargets; }
~enemytarget() { --numtargets; }
static size_t numberoft ...
条款16: 在operator=中对所有数据成员赋值
class base {
public:
base(int initialvalue = 0): x(initialvalue) {}
virtual void print();
private:
int x;
};
void base::print()
{
cout<<"base: x = "<<x<<endl;
}
class derived: public base {
p ...
条款11: 为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符
这是非常重要的一条,经常会导致一些内存的泄露,如以下这段代码所示:
// 一个很简单的string类
class string {
public:
string(const char *value);
~string();
... // 没有拷贝构造函数和operator=
private:
char *data;
};
string::string(const char *value)
{
if (value) {
data = new ...
对Effective条款学习
12。尽量使用初始化而不要在构造函数里赋值
在构造一个类时,对数据成员进行赋值通常有两种方法实现,一种是使用成员初始化列表,一种是在构造函数体内赋值。当然,在很多情况下
选择类似的方法时,看重的不是他的效率问题,更多的是看他的设计需求上。
先来看这个类
template<class t>
class namedptr {
public:
namedptr(const string& initname, t *initptr);
...
private:
const string name;
t *ptr;
};
该类的意图 ...
char c[]={ '|', '/', '-'};
printf("%s", c[0]);//error
printf("%s", c);//ok
开始非常奇怪,老是提示异常错误。还以为字符串初始化错误了。
后来查了下printf这个函数,他的输出是以'\0'为结尾,
用cout输出就完全正常
#include <stdio.h>
int main(void)
{
const int i = 2;
const int a[i] = {1, 2}; //为什么这里可以编译通过?
const int b[a[i ...