`
文章列表
#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 ...
条款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
条款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 ...
条款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 ...
Global site tag (gtag.js) - Google Analytics