您的位置:首页 > 编程语言 > C语言/C++

c++学习之面向对象

2013-08-04 15:09 190 查看
        面向对象,如今特别火的一个词,英文是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; }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: