基于对象编程与面向对象编程(表达式计算器3)

计算器的github下载地址:https://github.com/ljian1992/calculator

基于对象编程与面向对象编程

    我们的最终目的是用C++设计一个面向对象的表达式计算器,所以非常有必要弄清楚,什么是基于对象编程面向对象的编程。而要弄清楚这一点,又要先弄明白什么是值语言,什么是对象语义

值语义:对象的拷贝与原对象无关,拷贝后与原对象脱离关系,互不影响。这种拷贝叫深拷贝。拷贝之后脱离关系,只要在拷贝的时候都为对象分配内存空间就行了。某种些情况下算是一种对资源的浪费

 

值语义例子

class
Test { private : int * pNum_; public : Test(int num) { pNum_ = new int(num); };   Test(const Test& src) { pNum_ = new int(*(src.pNum_)); //重新在堆空间申请内存,拷贝后与原对象脱离关系 }   int * GetpNum()const { return pNum_; }   };   int main(void ) { Test t1(3 ); Test t2(t1); //拷贝后t2与t1脱离关系没有联系 std::cout << hex << t1.GetpNum() << std::endl; std::cout << hex << t2.GetpNum() << std::endl;   return 0
;
    }

对象语义:1.对象拷贝是禁止的

               2.对象拷贝允许,对象与被复制的对象之间共享资源

拷贝后,对象与被拷贝对象之间有有联系,这只需要拷贝的过程中,只是拷贝指针或引用, 这样的话,对象与被拷贝对象都“指向”同一资源。这种拷贝叫浅拷贝。当然这对资源的释放造成了一定的困难,不过有RAII技术来解决这个问题。

        Tips:

              1.C++编译器默认提供的拷贝构造函数就是对象语义的。

              2.JAVA是纯面向对象的语言,因此都是对象语义,这点是与C++的其中一个不同点

 

对象语义例子

class
Test { private : int * pNum_; public : Test(int num) { pNum_ = new int(num); };   Test(const Test& src) { pNum_ = src.pNum_; //都指向同一块内存区,存在联系, }   int * GetpNum()const { return pNum_; }   };   int main(void ) { Test t1(3 ); Test t2(t1); //拷贝过后,t2与t1存在联系 std::cout << hex << t1.GetpNum() << std::endl; std::cout << hex << t2.GetpNum() << std::endl;   return 0
;
    }

基于对象编程:它是基于值语言的

面向对象编程:它是基于对象语言的

转载于:https://www.cnblogs.com/Ljian1992/p/4287099.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值