面向对象表达式(2)
来源:互联网 发布:java培训后好找工作吗 编辑:程序博客网 时间:2024/05/22 12:46
首先分清值语义与对象语义
class A
{
public:
A(){}
~A(){}
}
A并不是值语义 因为默认的拷贝构造函数是浅拷贝
A a1;
A a2(a1) //a1与a2之间还存在着资源共享
值语义是指对象的拷贝与原对象无关。拷贝之后就与原对象脱离关系,彼此独立互不影响。比如说int,C++中的内置类型都是值语义,我们前面学过的三个标准库类型string,vector,map也是值语义
一个类实现了深拷贝之后才算是值语义
对象语义指的是面向对象意义下的对象
对象拷贝是禁止的(Noncopyable)。
一个对象被系统标准的复制方式复制后,与被复制的对象之间依然共享底层资源,对任何一个的改变都将改变另一个
基于对象编程 值语义
面向对象编程 对象语义
值语义对象生命期容易控制
对象语义对象生命不容易控制(通过智能指针来解决)。智能指针实际上是将对象语义转化为值语义
值语义与对象语义是分析模型决定的,语言的语法技巧用来匹配模型。
值语义对象生命期容易控制
对象语义对象生命不容易控制(通过智能指针来解决)。智能指针实际上是将对象语义转化为值语义
值语义与对象语义是分析模型决定的,语言的语法技巧用来匹配模型。
值语义对象通常以类对象的方式来是用
对象语义对象通常以指针或者引用方式来使用
常见的智能指针:
auto_ptr 所有权独占,不能共享,但是可以转移
shared_ptr 所有权共享, 内部维护一个引用计数,+1,-1 当引用次数为0时进行删除
weak_ptr 弱指针 它要与shared_ptr配合使用 循环引用 &a = b;或者 &a = b &b = a
scoped_ptr 与auto_ptr类似 不能共享,但是也不可以转移
智能指针都用到 RAII记法 资源获取即初始化
值语义对象的析构是确定的。
值语义与对象语义是分析模型决定的,语言的语法技巧用来匹配模型。(通过语法技巧来进行区分)
分析上一节
Node n1;
Node n2(n1);
是浅拷贝 当n1销毁的时候 会去释放它的子代 当n2销毁的时候 也会去释放它的子代
深拷贝是没有任何意义的
让它为对象语义 禁止拷贝
class Noncopyable
{
protected:
Noncopyable() {}
~Noncopyable() {}
private:
Noncopyable(const Noncopyable&);
const Noncopyable& operator=(const Noncopyable&);
};
class Node : private Noncopyable
{
public:
virtual double Calc() const = 0;
virtual ~Node() {}
};
用private继承
实现继承 而不是接口继承
表达式解析有两种:
1、逆波兰表示法 采用栈来实现
2、如果采用树表示,就是用递归下降法,是用编译原理来构造一个表达式树
表达式解析:
1、expression :=
a、term '+' expression
b、term '-' expression
c、term
2、term :=
a、factor '*' term
b、factor '/' term
c、factor
3、factor :=
a、number
b、identifier
c、'-' factor
d、'(' expression ')'
String buf
Scanner只负责扫描
Parser(分析) 负责构建一棵树
- 面向对象表达式(2)
- 面向对象表达式
- 面向对象表达式(四)
- 面向对象版表达式(九)
- Java面向对象 正则表达式
- 面向对象的表达式计算器
- 黑马程序员----2面向对象与正则表达式
- python 面向对象入门 - 之 正则表达式
- Java面向对象——正则表达式
- 面向对象的表达式计算器(三)
- 面向对象版表达式(十)
- Java面向对象——正则表达式
- c++ 42面向对象表达式Scanner 实现
- 面向对象表达式计算器源码分享
- Python 面向对象、继承部分、正则表达式
- F#入门-第四章 面向对象-第八节 对象表达式
- 面向对象2(2)
- 面向对象讲解(2)
- Intent传递简单对象与集合
- self关键字
- android 流量的统计
- SharePoint 2013 中文站点更新列表字段的标题(Title)不能work
- Ubuntu Server启动root并配置远程登陆
- 面向对象表达式(2)
- 但为什么公务车却独享舒适?
- 软媒魔方5.13发布:制作U盘启动,更快速
- 初涉设计模式
- DB2 类型转换函数
- QT 之 QListView类
- 有关于mfc webbrowser插件的使用
- 使用VisualVM监测Tomcat JVM情况的配置(Windows+Linux)
- qwt的安装和移植-