c++学习之面向对象
来源:互联网 发布:步进电机控制器编程 编辑:程序博客网 时间:2024/05/16 14:59
面向对象,如今特别火的一个词,英文是object。我所理解的是面向对象是这样的:
程序 = 算法+数据结构。算法也就是我们使用的代码,数据结构就是我们操作的数据,在编程的世界里面,程序员所面对的就是这两样的东西,算法操作数据。但是对象的出现,将此两样东西统一起来,特定的算法应用在特定的数据结构上面,对外表现出一个统一的整体。因此,我们可以理解,我们在定义一个类的时候,总是常常将数据定义为私有,函数定义为public,这样,在这个统一的对象中,我们仅能通过该对象的函数来操作这些数据,如果将数据定义为public,在语法上是可行的,但是会破坏了对象的封装,因为在很多情况下,数据的变化是会影响代码执行的,因此,如果将数据定义为public,站在维护的角度来说,我们很难找到出错的原因,因为我们不知道数据的状态都由谁来操作了。本人做java开发3年,面向对象,纯的,至今看了c++ primer中关于面向对象的解释,才理解到这些。汗颜呀。
好了,我们来看看如何定义一个对象吧。看如下代码:
class Rectangle{private:int x;int y;public:Rectangle(int,int);~Rectangle();int area();};
通常情况下,我们会按照如上格式来定义一个对象,注意{}结束处,需要使用分号。另外,在定义中,我们仅仅声明函数,但是不具体实现,针对特定的函数,如果实现代码在2行以内,我们可以将函数的实现放到定义里面来,至于有什么区别,是这样的:在对象定义中实现函数,在运行时,c++会尽可能的将此函数进行内联,如果在外面单独实现函数,那么,函数的执行将不会被内联。内联操作比函数调用的效率高很多,至于原因,你懂的。
来看看完整的实现吧
class Rectangle{private:int x;int y;public:Rectangle(int,int);~Rectangle();int area();};Rectangle::Rectangle(int a,int b){cout << "Rectangle construct..." << endl;x = a;y = b;}Rectangle::area(){return x*y;}Rectangle::~Rectangle(){cout << "Rectangle deconstruct.." << endl;}以上需要说明的是,area()函数其实是可以放在该函数的定义中。
Rectangle(int a,int b)是对象的构造函数,定义的时候使用了::,该操作符说明了定义的函数,是属于的某个类的。
~Rectangle()是对象的析构函数,在对象运行结束后,该函数自动执行,用于释放该对象所占用的系统资源,将其归还给操作系统。如果没有定义这个函数,可能会内存泄露恶。。
来看个使用例子吧。
int main(){Rectangle r(5,6);Rectangle *rect = new Rectangle(3,4);cout << "r's size is :" << r.area() << endl;cout << "rect's size is: " << rect->area() << endl;return 0;}
运行结果如下:
看到这个结果,如果大概的看一下,是没问题的,两个对象的area()函数返回成员变量的乘积。但是仔细留意一下,发现其中一个函数没有执行析构函数。原因是该对象是指针引用的。我们操作完成后,并没有释放该指针。
正确的代码如下:在上面的代码中加入下面标红色的代码即可。
int main(){Rectangle r(5,6);Rectangle *rect = new Rectangle(3,4);cout << "r's size is :" << r.area() << endl;cout << "rect's size is: " << rect->area() << endl;delete rect;return 0;}
执行结果如下:
至此,c++中对象的基本使用就完成了,这里只是记录一个基本的知识,还有很多我也不懂,本人还在慢慢学习中....
将这里的代码统一记录在下来,需要使用的童鞋,可以直接复制下来就能运行了。
#include <iostream>using namespace std;class Rectangle{private:int x;int y;public:Rectangle(int,int);~Rectangle();int area();};Rectangle::Rectangle(int a,int b){cout << "Rectangle construct..." << endl;x = a;y = b;}Rectangle::area(){return x*y;}Rectangle::~Rectangle(){cout << "Rectangle deconstruct.." << endl;}int main(){Rectangle r(5,6);Rectangle *rect = new Rectangle(3,4);cout << "r's size is :" << r.area() << endl;cout << "rect's size is: " << rect->area() << endl;delete rect;return 0;}
- 【C++】C++基础学习之面向对象
- 【C#】之面向对象
- Object-c 学习之面向对象的理解
- C语言之面向对象编程学习笔记
- 【C#】面向对象之继承
- .net学习之面向对象
- java学习之面向对象
- javascript学习之面向对象
- c++学习之面向对象
- python学习之--面向对象
- PHP之面向对象学习
- Python学习之面向对象
- php 学习之面向对象
- 【IOS 开发学习总结-OC-15】objective-c面向对象之——对象初始化
- .net学习之C#面向对象 A1.面向对象
- 【黑马程序员】iOS学习之路——Objective-C之面向对象
- C # 面向对象的初步学习
- object-c 学习(面向对象)
- java序列化的作用-这个挺有用的,不妨学学
- 链接指示符: extern “C”
- eclipse Content Assist 无法使用,不能自动补全的解决办法
- POJ 2531 Network Saboteur(DFS & 随机化)解题报告
- PEB 和 TIB结构
- c++学习之面向对象
- Java多线程之生产者与消费者
- Maya: 菜单 编辑曲线 >选择>选择曲线CV
- hdu2063(完全背包)
- K&R学习笔记 第七章
- hdu 3605 Escape(多重匹配)
- Maya: 菜单 编辑曲线 >选择>选择曲线上的第一个CV
- 双向链表
- jxl导出Excel