posts - 0,comments - 1,trackbacks - 0
    石头剪子布:result=(man-computer+4)%3-1

 

随机数:srand(time(NULL))

 

曾经我也想问这个问题,我那时候看的是钱能的书,这个原因没有写,后来看了本老外的书知道了, 如果不传引用而传值的话,编译器会报告内存溢出,原因是:

     如果参数用值来传递,就需要创建该值的一个副本,如何创建副本呢??使用拷贝构造函数,但是原函数本身就是一个拷贝构造函数,所以它调用的是它自己,于是,形成递归调用,导致耗尽所有的内存

 如果传的是引用,这样就可以不要建立副本了.....

看来我比楼主快一点点...我学到后面去了,呵呵!!一起加油!!

 

使用指针做为函数的形参,只有对指针所指对象进行的操作才会改变实参的值。要实现改变实参,还有一种更安全更自然的方法-引用形参。

 

http://www.cppblog.com/Solstice/archive/2012/07/06/learncpp.html

 

syntax semantics…

 

C++ Primer 第四版》的代码示例质量很高,不是那种随手写的玩具代码。第10.4.2节实现了带禁用词的单词计数,第10.6利用标准库容器简洁地实现了基于倒排索引思路的文本检索,第15.9节又用面向对象方法扩充了文本检索的功能,支持布尔查询。值得一提的是,这本书讲解继承和多态时举的例子符合Liskov替换原则,是正宗的面向对象。相反,某些教材以复用基类代码为目的,常以人、学生、老师、教授雇员、经理、销售、合同工为例,这是误用了面向对象的复用

 

就学习C++语言本身而言,我认为有几个练习非常值得一做。这不是重复发明轮子,而是必要的编程练习,帮助你熟悉掌握这门语言。是写一个复数类或者大整数类[34],实现基本的运算,熟悉封装与数据抽象。是写一个字符串类,熟悉内存管理与拷贝控制。是写一个简化的vector<T>类模板,熟悉基本的模板编程,你的这个vector应该能放入intstring等元素类型。是写一个表达式计算器,实现一个节点类的继承体系(右图),体会面向对象编程。前三个练习是写独立的值语义的类,第四个练习是对象语义,同时要考虑类与类之间的关系。

 

箭头操作符(->)的通常用法是,使用一个类对象的指针来调用该指针所指对象的成员。左操作数为对象指针,右操作数为该对象的成员。

 

溺水的鱼(231391559)  21:26:47

@painberg 当然不行了 你把整个程序好好看看 没有参数 SET容器怎么传递? 没有SET容器 往哪个FOLDERputmessege

溺水的鱼(231391559)  21:27:53

因为folders已经存放了messege 所以删的时候挨个删就行了 不需要参数了

溺水的鱼(231391559)  21:29:30

没存之前 你需要制定哪个folder存放messege所以必须传参

ptr(new int(*(orig.ptr))):首先动态分配一个int型的空间,

初始化为*(orig.ptr)

将此int型空间地址传给ptr..

 

防止自身赋值:

HasPtr& HasPtr::operator=(HasPtr& rhs)

{

++rhs.ptr->use;

if(--ptr->use==0)

delete ptr;

ptr=rhs.ptr;

val=rhs.val;

return *this;

}

 

引用和指针的静态类型可以不同,这是C++用以支持多态性的基石。

保留字virtual只在类内部的成员函数声明中出现,不能用在类定义体外部出现的函数定义。

 

虚函数与默认实参:P482http://topic.csdn.net/u/20101230/18/aa062be3-79e3-40cf-826b-b576b20bad3f.html#replyachor

如下定义

class A{

virtual void f(int i = 1){cout<<"a"<<i<<endl;}
};

 

class B: public class A{

void f(int i = 2){cout<<"b"<<i<<endl;}

}

当有

B b;

A* a = &b;

a->f()

其实等价于

a->f(1)

输出为b1
C++ primer 这本书上有这么两句话派生类虚函数调用基类版本时,必须显式使用作用域操作符。如果派生类函数忽略了这样做,则函数调用会在运行时确定并且将是一个自身调用,从而导致无穷递归。

 

这句话应该这样理解:

当你实现派生类虚函数时,如果函数体内需要调用基类的虚函数版本时,需要显式使用基类的作用域操作符,否则就会在派生类作用域内调用派生类版本的虚函数,这样会导致无穷递归。

就是自己在调用自己呀,没有指明调用的是基类的虚函数,自动认为是调用派生类的虚函数,然后就再次调用了,一直进行下去了。

 

public A

{

virtual void foo(void) { }

};

 

public B: public A

{

void foo(void)

{

foo(); // 递归调用自己,即 B::foo()

A::foo(); // 明确告诉编译器,调用的是 A::foo(), 而不是自己

}

};

 

 

C++中的函数调用默认不使用动态绑定。要触发动态绑定,必须满足两个条件:第一,只有指定为虚函数的成员函数才能进行动态绑定,成员函数默认为非虚函数,非虚函数不进行动态绑定;第二,必须通过基类类型的引用或指针进行函数调用。

 

P483):无论派生列表中是什么访问标号,所有继承Base的类对Base中的成员具有相同的访问。派生访问标号将控制派生类的用户对从八色继承而来的成员的访问。

 

(P510)

sum+=(*iter)->net_price(items.count(*iter));

sum+=(*iter)->net_price(size(*iter)) ;
构造函数中调用虚函数的问题: http://fuliang.iteye.com/blog/152972

 

异常处理。。在抛出中对指针解引用,不要抛出指针本身。

auto_ptr对象的复制和赋值是破坏性操作。

 

1)找到候选函数集。

2)从候选集中选择可行函数。

3)从可行集合中选择一个最佳匹配,并产生代码调用该函数。

 

 

posted on 2012-11-29 13:12 painberg 阅读(167) 评论(1)  编辑 收藏 引用

FeedBack:
# re: C++ primer 读书笔记
2012-11-29 13:14 | painberg
没想到这么乱  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航:   博客园   博客园最新博文   博问   管理