编程语言C++
qscool1987
|厚积薄发|
|贵在坚持|
展开
-
关于C++中很难懂又必须懂的一些知识
1.Name Return Value这属于编译优化方面的知识2.Name mangling这属于编译器编译时期的行为3.The Life Of Temporary Object这属于执行期语义4.Virtual Table这属于了类继承体系和面向对特性以及对象模型5.Data Member Layout这属于对象模型6.Bitwise Copy这属于构原创 2012-02-17 10:32:58 · 1344 阅读 · 0 评论 -
Exception Handling
C++异常处理机制是很难懂的知识,长时间来我都很惧怕它今天我就来剖析下这个机制吧!C++的Exception Handling由三个主要的语汇组件构成:1.一个throw子句。2.一个或多个catch子句。3.一个try区段。这些是语法,记住就可以了。我们要研究的是,发生了异常之后会伴随着发生些什么?这里我先提出一个术语,这个术语叫unwinding the sta原创 2012-02-17 09:54:23 · 1489 阅读 · 0 评论 -
所谓多态本质
请看代码!#include using namespace std;class people{ public: people():age(0),name(""){} people(int i,string s):age(i),name(s){} virtual void sleep() { cout << "p原创 2012-01-01 14:04:49 · 2540 阅读 · 2 评论 -
C++的宏观与微观
宏观世界是由微观世界所组成,这是亘古不变的道理,C++同样是这样如果说生物是由原子组成的,那么C++就是由对象模型组成的,对象模型就相当于原子模型,对象模型的变化和互相联系形成了目前C++一切的特性再说C++宏观,C++的宏观表现为面向对象,由此细分了封装,继承,多态,反应到微观上就是对象模型,对象模型的扩展,对象模型转化。C++语言特性是建立在这种对象模型的基础上的,并不是空想而来的原创 2012-01-01 15:17:54 · 1044 阅读 · 0 评论 -
函数调用时的栈帧结构以及临时变量的深入研究
C++代码:#include#includeusing namespace std;class base{public: base():id(0){} base(int i):id(i){} base(const base &orig):id(orig.id){cout << "called copy constructor" << endl;}privat原创 2011-12-17 17:41:59 · 2394 阅读 · 0 评论 -
C++中的域
这一段时间一直在琢磨对象模型,现在看到个问题都想用模型来解释,不过确实如此,几乎什么都可以用对象模型来解释搞这个模型就绝对离不开域到底域是什么?这个恐怕不是三言两语说的明白的,每个人都有一定的概念,但是可能大不相同C++上指的是作用域{}一对大括号就对应了一个作用域,学过C++的都知道,作用域里的局部变量出了作用域就消亡了(根本原因是栈恢复)而对于静态变量,编译器编译的时候做了原创 2011-12-31 09:32:39 · 4046 阅读 · 0 评论 -
学习:设计模式 可复用面向对象软件的基础 【引言】
1.1什么是设计模式问题一:什么是设计模式?提供相关问题的解决方案问题二:一个模式的基本要素是什么?模式名称(pattern name)问题(problem)解决方案(solution)效果(consequences)1.2smalltalk MVC中的设计模式类的模型/视图/控制器(Model/view/controller)模型Model是应用对象,视图原创 2012-01-07 00:51:40 · 1396 阅读 · 0 评论 -
C++抽象数据类型,如何抽象
C++是个多范式的语言,所以C++难学,所以C++强大,可比起java,C#,用C++来做软件开发,开发周期要长很多。为什么呢?这是因为C++的自由度高,换句话说自由度越高地语言,开发软件的周期越长,这是有一定道理的自由度过高就不容易掌控,java和C#它们的库很强大,这在一定程度上就限制了自由度,相当于提供了一套模式,方法,开发人员不需要去为实现这些东西而操心然而C++程序员却需要为原创 2012-01-05 23:11:35 · 7186 阅读 · 1 评论 -
C++对象模型的一点理解
这两天一直在研究对象模型的问题,发现这个问题确实不好理解,但通过反汇编,对于汇编下,数据段,代码段有了一定的认识。经过两天的研究测试发现当一个类被定义了之后,数据和函数是分离的,函数是放在断码段的,函数名标示函数的起始地址,往下就是函数内部的指令当创建一个类的object时,栈上开辟空间来容纳其中的数据变量,然后调用构造函数来初始化数据成员,如何调用构造函数我至今也不太清楚。。。#in原创 2011-12-11 22:50:31 · 542 阅读 · 0 评论 -
C++派生类对象模型
#include using namespace std;class base{ public: base(){} virtual ~base(){} int get()const{return num;} private: int num;};class base1{ public: base1(){} virtual ~base1()原创 2011-12-10 17:30:28 · 510 阅读 · 0 评论 -
Vector部分实现
#ifndef _MY_VECTOR_H#define _MY_VECTOR_H#include #include templateclass MyVector{ public: class iterator { public: iterator():pelem(NULL){} iterat原创 2011-12-07 16:52:22 · 1974 阅读 · 0 评论 -
string练练手
#ifndef _STRING_H_H#define _STRING_H_H#include using namespace std;class String;ostream& operator << (ostream &os,const String &str);istream& operator >> (istream &in,String &str);class原创 2011-12-02 13:20:20 · 698 阅读 · 0 评论 -
稍微对String类的一点改进
#ifndef _STRING_H_H#define _STRING_H_H#include using namespace std;class String;ostream& operator << (ostream &os,const String &str);istream& operator >> (istream &in,String &str);String原创 2011-12-02 17:14:27 · 723 阅读 · 0 评论 -
UML类关系之关联和聚合的区别
关联:分为双向关联,单项关联,自身关联双向关联:class C2;class C1{ C2 *p;};class C2{ C1 *p;};上述代码反应的就是一个双向关联关系,我们来看下内存结构类C1知道类C2,类C2也知道类C1,他们可以互相调用对方的方法。单向关联:class C2;class C1{ C2 *p原创 2012-02-27 17:02:03 · 1923 阅读 · 1 评论