c++学习之面向对象
2013-08-04 15:09
190 查看
面向对象,如今特别火的一个词,英文是object。我所理解的是面向对象是这样的:
程序 = 算法+数据结构。算法也就是我们使用的代码,数据结构就是我们操作的数据,在编程的世界里面,程序员所面对的就是这两样的东西,算法操作数据。但是对象的出现,将此两样东西统一起来,特定的算法应用在特定的数据结构上面,对外表现出一个统一的整体。因此,我们可以理解,我们在定义一个类的时候,总是常常将数据定义为私有,函数定义为public,这样,在这个统一的对象中,我们仅能通过该对象的函数来操作这些数据,如果将数据定义为public,在语法上是可行的,但是会破坏了对象的封装,因为在很多情况下,数据的变化是会影响代码执行的,因此,如果将数据定义为public,站在维护的角度来说,我们很难找到出错的原因,因为我们不知道数据的状态都由谁来操作了。本人做java开发3年,面向对象,纯的,至今看了c++
primer中关于面向对象的解释,才理解到这些。汗颜呀。
好了,我们来看看如何定义一个对象吧。看如下代码:
通常情况下,我们会按照如上格式来定义一个对象,注意{}结束处,需要使用分号。另外,在定义中,我们仅仅声明函数,但是不具体实现,针对特定的函数,如果实现代码在2行以内,我们可以将函数的实现放到定义里面来,至于有什么区别,是这样的:在对象定义中实现函数,在运行时,c++会尽可能的将此函数进行内联,如果在外面单独实现函数,那么,函数的执行将不会被内联。内联操作比函数调用的效率高很多,至于原因,你懂的。
来看看完整的实现吧
Rectangle(int a,int b)是对象的构造函数,定义的时候使用了::,该操作符说明了定义的函数,是属于的某个类的。
~Rectangle()是对象的析构函数,在对象运行结束后,该函数自动执行,用于释放该对象所占用的系统资源,将其归还给操作系统。如果没有定义这个函数,可能会内存泄露恶。。
来看个使用例子吧。
运行结果如下:
看到这个结果,如果大概的看一下,是没问题的,两个对象的area()函数返回成员变量的乘积。但是仔细留意一下,发现其中一个函数没有执行析构函数。原因是该对象是指针引用的。我们操作完成后,并没有释放该指针。
正确的代码如下:在上面的代码中加入下面标红色的代码即可。
至此,c++中对象的基本使用就完成了,这里只是记录一个基本的知识,还有很多我也不懂,本人还在慢慢学习中....
将这里的代码统一记录在下来,需要使用的童鞋,可以直接复制下来就能运行了。
程序 = 算法+数据结构。算法也就是我们使用的代码,数据结构就是我们操作的数据,在编程的世界里面,程序员所面对的就是这两样的东西,算法操作数据。但是对象的出现,将此两样东西统一起来,特定的算法应用在特定的数据结构上面,对外表现出一个统一的整体。因此,我们可以理解,我们在定义一个类的时候,总是常常将数据定义为私有,函数定义为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(); };以上需要说明的是,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;
}
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++基础学习笔记4--面向对象封装继承多态
- C++面向对象—成员函数与成员变量的实现机制学习笔记(1)
- C++面向对象(学习笔记)
- C++学习笔记4:面向对象的基础之类与对象
- C语言学习笔记之C++面向对象
- C++及相关面向对象进阶学习用书推荐
- Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类
- C++基础学习笔记----第七课(面向对象的基本概念)
- Pro visual c++/cli and .net 2.0 platform2 学习笔记(9第三章 面向对象的C++/CLI==2)
- C++学习笔记(面向对象)
- C++学习杂记之-面向对象
- 面向对象 C++学习之我之过错
- C/C++学习笔记(五)面向对象的编程
- C++面向对象的学习:写一个数组类
- C++学习笔记11-面向对象2
- 每天学习一点c++之六——面向对象
- 面向对象 C++学习之我之过错
- C++学习笔记10-面向对象