注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

being23

写给未来的自己

 
 
 

日志

 
 
关于我

真正的坚定,就是找到力量去做自己喜欢的事情,并为之努力,这样才会觉得生活是幸福的。

网易考拉推荐

类(1)  

2009-09-10 20:23:03|  分类: 研一上 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

来自:http://www.cplusplus.com/


类(class)可以看成是结构体(struct)的延伸,即除了包含数据,还有函数(或者称作方法)。

对象(object)是类(class)的一个实例。从变量的角度可以理解成,类(class)是一种数据类型,而对象(object)是变量。

类使用关键字 class  来声明,具有如下的形式:

class class_name {

  access_specifier_1:

    member1;

  access_specifier_2:

    member2;

  ...

  } object_names;

这里,标识符(identifierclass_name是类名,object_names是对象列表,member是成员变量,可以是数据或者函数的声明,access_specifier是访问控制符。

访问控制主要分为下面3种,privateprotectedpublic

private——同一个类的其他成员或者friend类才可以访问;

protected——同一个类的其他成员或者friend类或者子类才可以访问;

public——任何类都可以访问。

默认情况下的访问控制是private

class CRectangle {

    int x, y;

  public:

    void set_values (int,int);

    int area (void);

  } rect;

这里定义了一个类 CRectangle 和它的一个对象 rect ,还有4个成员:两个 int 类型的xy,访问控制默认为 private ,和两个函数 set_values()area() (这里只是声明,并没有实现)。访问成员的方式为:对象名.成员名(注意成员名前面的点)

例如在上面的声明中:

rect.set_values (3,4);

myarea = rect.area();

其中x,y变量因为访问控制为private,所以只能通过内部成员访问,例如:set_values()area() 。

一个完整的例子如下:

// classes example

#include <iostream>

using namespace std;

class CRectangle {

    int x, y;

  public:

    void set_values (int,int);

    int area () {return (x*y);}

};

void CRectangle::set_values (int a, int b) {

  x = a;

  y = b;

}

int main () {

  CRectangle rect;

  rect.set_values (3,4);

  cout << "area: " << rect.area();

  return 0;

}

area: 12

其中void CRectangle::set_values (int a, int b) 中的::用于在类的外面定义类的成员,即这个函数set_values(int a,int b))是属于某某类(CRectangle)的。

从上面的例子中可以看到函数area()是在类的内部实现的,而函数set_values(int a,int b)是在类的外部实现的。他们的唯一的区别就是前者在编译的时候被当成内联函数(inline)处理,而后者则是一个正常的函数。

可以同时声明一个类的多个对象,这些对象在内存中占有不同的存储空间,互不影响。例如:

// example: one class, two objects

#include <iostream>

using namespace std;

class CRectangle {

    int x, y;

  public:

    void set_values (int,int);

    int area () {return (x*y);}

};

void CRectangle::set_values (int a, int b) {

  x = a;

  y = b;

}

int main () {

  CRectangle rect, rectb;

  rect.set_values (3,4);

  rectb.set_values (5,6);

  cout << "rect area: " << rect.area() << endl;

  cout << "rectb area: " << rectb.area() << endl;

  return 0;

}

rect area: 12

rectb area: 30 

这个例子中调用不同对象rectrectbset_values(int a,int b)方法和area()方法,产生了不同的输出。

  评论这张
 
阅读(247)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017