当前位置: 首页 > news >正文

想自己在家做外贸网站建设食品网站

想自己在家做外贸网站,建设食品网站,地图网站抓取,辽宁省城乡住房和建设厅网站类(class)是一种将数据和函数组织在同一个结构里的逻辑方法。定义类的关键字为class #xff0c;其功能与C语言中的struct类似#xff0c;不同之处是class可以包含函数#xff0c;而不像struct只能包含数据元素。 类定义的形式是#xff1a; [cpp] view plaincopy class cl…  类(class)是一种将数据和函数组织在同一个结构里的逻辑方法。定义类的关键字为class 其功能与C语言中的struct类似不同之处是class可以包含函数而不像struct只能包含数据元素。 类定义的形式是 [cpp] view plaincopy class class_name {       permission_label_1:           member1;       permission_label_2:           member2;       ...   } object_name;   其中 class_name 是类的名称 (用户自定义的类型) 而可选项object_name 是一个或几个对象(object)标识。Class的声明体中包含成员members成员可以是数据或函数定义同时也可以包括允许范围标志 permission labels范围标志可以是以下三个关键字中任意一个private:, public: 或 protected:。它们分别代表以下含义 private class的private成员只有同一个class的其他成员或该class的“friend” class可以访问这些成员。protected class的protected成员只有同一个class的其他成员或该class的“friend” class或该class的子类(derived classes) 可以访问这些成员。public class的public成员任何可以看到这个class的地方都可以访问这些成员。 如果我们在定义一个class成员的时候没有声明其允许范围这些成员将被默认为 private范围。 例如 [cpp] view plaincopy class CRectangle {                 int x, y;          public:              void set_values (int,int);              int area (void);      } rect;         上面例子定义了一个class CRectangle 和该class类型的对象变量rect 。这个class 有4个成员两个整型变量 (x 和 y) 在private 部分 (因为private 是默认的允许范围)以及两个函数 在 public 部分set_values() 和 area()这里只包含了函数的原型(prototype)。 注意: class名称与对象(object)名称的不同在上面的例子中CRectangle 是class 名称 (即用户定义的类型名称)而rect 是一个CRectangle类型的对象名称。它们的区别就像下面例子中类型名 int和 变量名a 的区别一样 int a;int 是class名称 (类型名) 而a 是对象名 object name (变量)。 在程序中我们可以通过使用对象名后面加一点再加成员名称同使用C structs一样来引用对象rect 的任何public成员就像它们只是一般的函数或变量。例如 rect.set_value (3,4); myarea rect.area();但我们不能够引用 x 或 y 因为它们是该class的 private 成员它们只能够在该class的其它成员中被引用。晕了吗下面是关于class CRectangle的一个复杂的例子 // classes example#include iostream.hclass CRectangle {int x, y;public:void set_values (int,int);int area (void) {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();} area: 12 上面代码中新的东西是在定义函数set_values().使用的范围操作符(双冒号:: )。它是用来在一个class之外定义该class的成员。注意我们在CRectangle class内部已经定义了函数area() 的具体操作因为这个函数非常简单。而对函数set_values() 在class内部只是定义了它的原型prototype而其实现是在class之外定义的。这种在class之外定义其成员的情况必须使用范围操作符::。 范围操作符 (::) 声明了被定义的成员所属的class名称并赋予被定义成员适当的范围属性这些范围属性与在class内部定义成员的属性是一样的。例如在上面的例子中我们在函数set_values() 中引用了private变量x 和 y这些变量只有在class内部和它的成员中才是可见的。 在class内部直接定义完整的函数和只定义函数的原型而把具体实现放在class外部的唯一区别在于在第一种情况中编译器(compiler) 会自动将函数作为inline 考虑而在第二种情况下函数只是一般的class成员函数。 我们把 x 和 y 定义为private 成员 (记住如果没有特殊声明所有class的成员均默认为private )原因是我们已经定义了一个设置这些变量值的函数 (set_values()) 这样一来在程序的其它地方就没有办法直接访问它们。也许在一个这样简单的例子中你无法看到这样保护两个变量有什么意义但在比较复杂的程序中这是非常重要的因为它使得变量不会被意外修改 这里意外指的是从object的角度来讲的意外。 使用class的一个更大的好处是我们可以用它来定义多个不同对象(object)。例如接着上面class CRectangle的例子除了对象rect之外我们还可以定义对象rectb // class example#include iostream.hclass CRectangle {int x, y;public:void set_values (int,int);int area (void) {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;} rect area: 12 rectb area: 30 注意: 调用函数rect.area() 与调用rectb.area()所得到的结果是不一样的。这是因为每一个class CRectangle 的对象都拥有它自己的变量 x 和 y以及它自己的函数set_value() 和 area()。 这是基于对象( object) 和 面向对象编程 (object-oriented programming)的概念的。这个概念中数据和函数是对象(object)的属性(properties)而不是像以前在结构化编程 (structured programming) 中所认为的对象(object)是函数参数。在本节及后面的小节中我们将讨论面向对象编程的好处。 在这个具体的例子中我们讨论的class (object的类型)是CRectangle有两个实例(instance)或称对象(object)rect 和 rectb每一个有它自己的成员变量和成员函数。 构造函数和析构函数 (Constructors and destructors) 对象(object)在生成过程中通常需要初始化变量或分配动态内存以便我们能够操作或防止在执行过程中返回意外结果。例如在前面的例子中如果我们在调用函数set_values( ) 之前就调用了函数area()将会产生什么样的结果呢可能会是一个不确定的值因为成员x 和 y 还没有被赋于任何值。 为了避免这种情况发生一个class 可以包含一个特殊的函数构造函数 constructor它可以通过声明一个与class同名的函数来定义。当且仅当要生成一个class的新的实例 (instance)的时候也就是当且仅当声明一个新的对象或给该class的一个对象分配内存的时候这个构造函数将自动被调用。下面我们将实现包含一个构造函数的CRectangle // class example#include iostream.hclass CRectangle {int width, height;public:CRectangle (int,int);int area (void) {return (width*height);}};CRectangle::CRectangle (int a, int b) {width a;height b;}int main () {CRectangle rect (3,4);CRectangle rectb (5,6);cout rect area: rect.area() endl;cout rectb area: rectb.area() endl;} rect area: 12 rectb area: 30 正如你所看到的这个例子的输出结果与前面一个没有区别。在这个例子中我们只是把函数set_values换成了class的构造函数constructor。注意这里参数是如何在class实例 (instance)生成的时候传递给构造函数的 CRectangle rect (3,4); CRectangle rectb (5,6);同时你可以看到构造函数的原型和实现中都没有返回值(return value)也没有void 类型声明。构造函数必须这样写。一个构造函数永远没有返回值也不用声明void就像我们在前面的例子中看到的。 析构函数Destructor 完成相反的功能。它在objects被从内存中释放的时候被自动调用。释放可能是因为它存在的范围已经结束了例如如果object被定义为一个函数内的本地local对象变量而该函数结束了或者是因为它是一个动态分配的对象而被使用操作符delete释放了。 析构函数必须与class同名加水波号tilde (~) 前缀必须无返回值。 析构函数特别适用于当一个对象被动态分别内存空间而在对象被销毁的时我们希望释放它所占用的空间的时候。例如 // example on constructors and destructors#include iostream.hclass CRectangle {int *width, *height;public:CRectangle (int,int);~CRectangle ();int area (void) {return (*width * *height);}};CRectangle::CRectangle (int a, int b) {width new int;height new int;*width a;*height b;}CRectangle::~CRectangle () {delete width;delete height;}int main () {CRectangle rect (3,4), rectb (5,6);cout rect area: rect.area() endl;cout rectb area: rectb.area() endl;return 0;} rect area: 12 rectb area: 30 构造函数重载(Overloading Constructors) 像其它函数一样一个构造函数也可以被多次重载(overload)为同样名字的函数但有不同的参数类型和个数。记住编译器会调用与在调用时刻要求的参数类型和个数一样的那个函数(Section 2.3, Functions-II)。在这里则是调用与类对象被声明时一样的那个构造函数。 实际上当我们定义一个class而没有明确定义构造函数的时候编译器会自动假设两个重载的构造函数 (默认构造函数default constructor 和复制构造函数copy constructor)。例如对以下class [cpp] view plaincopy class CExample {     public:       int a,b,c;       void multiply (int n, int m) { an; bm; ca*b; };   };   没有定义构造函数编译器自动假设它有以下constructor 成员函数 Empty constructor 它是一个没有任何参数的构造函数被定义为nop (没有语句)。它什么都不做。 CExample::CExample () { };Copy constructor 它是一个只有一个参数的构造函数该参数是这个class的一个对象这个函数的功能是将被传入的对象object的所有非静态non-static成员变量的值都复制给自身这个object。 [cpp] view plaincopy CExample::CExample (const CExample rv) {        arv.a;  brv.b;  crv.c;    }       必须注意这两个默认构造函数empty construction 和 copy constructor 只有在没有其它构造函数被明确定义的情况下才存在。如果任何其它有任意参数的构造函数被定义了这两个构造函数就都不存在了。在这种情况下如果你想要有empty construction 和 copy constructor 就必需要自己定义它们。 当然如果你也可以重载class的构造函数定义有不同的参数或完全没有参数的构造函数见如下例子 // overloading class constructors#include iostream.hClass CRectangle {int width, height;public:CRectangle ();CRectangle (int,int);int area (void) {return (width*height);}};CRectangle::CRectangle () {width 5;height 5;}CRectangle::CRectangle (int a, int b) {width a;height b;}int main () {CRectangle rect (3,4);CRectangle rectb;cout rect area: rect.area() endl;cout rectb area: rectb.area() endl;} rect area: 12 rectb area: 25 在上面的例子中rectb 被声明的时候没有参数所以它被使用没有参数的构造函数进行初始化也就是width 和height 都被赋值为5。 注意在我们声明一个新的object的时候如果不想传入参数则不需要写括号() CRectangle rectb; // right CRectangle rectb(); // wrong!  类的指针(Pointers to classes) 类也是可以有指针的要定义类的指针我们只需要认识到类一旦被定义就成为一种有效的数据类型因此只需要用类的名字作为指针的名字就可以了。例如 CRectangle * prect;是一个指向class CRectangle类型的对象的指针。 就像数据机构中的情况一样要想直接引用一个由指针指向的对象(object)中的成员需要使用操作符 -。这里是一个例子显示了几种可能出现的情况 // pointer to classes example#include iostream.hclass CRectangle {int width, height;public:void set_values (int, int);int area (void) {return (width * height);}};void CRectangle::set_values (int a, int b) {width a;height b;}int main () {CRectangle a, *b, *c;CRectangle * d new CRectangle[2];b new CRectangle;c a;a.set_values (1,2);b-set_values (3,4);d-set_values (5,6);d[1].set_values (7,8);cout a area: a.area() endl;cout *b area: b-area() endl;cout *c area: c-area() endl;cout d[0] area: d[0].area() endl;cout d[1] area: d[1].area() endl;return 0;} a area: 2 *b area: 12 *c area: 2 d[0] area: 30 d[1] area: 56 以下是怎样读前面例子中出现的一些指针和类操作符 (*, , ., -, [ ]) *x 读作: pointed by x 由x指向的x 读作: address of xx的地址x.y 读作: member y of object x 对象x的成员y(*x).y 读作: member y of object pointed by x由x指向的对象的成员yx-y 读作: member y of object pointed by x (同上一个等价)x[0] 读作: first object pointed by x由x指向的第一个对象x[1] 读作: second object pointed by x由x指向的第二个对象x[n] 读作: (n1)th object pointed by x由x指向的第n1个对象 在继续向下阅读之前一定要确定你明白所有这些的逻辑含义。如果你还有疑问再读一遍这一笑节或者同时参考 小节 3.3, 指针(Pointers) 和 3.5, 数据结构(Structures). 由关键字struct和union定义的类 类不仅可以用关键字class来定义也可以用struct或union来定义。 因为在C中类和数据结构的概念太相似了所以这两个关键字struct和class的作用几乎是一样的也就是说在C中struct定义的类也可以有成员函数而不仅仅有数据成员)。两者定义的类的唯一区别在于由class定义的类所有成员的默认访问权限为private而struct定义的类所有成员默认访问权限为public。除此之外两个关键字的作用是相同的。 union的概念与struct和class定义的类不同 因为union在同一时间只能存储一个数据成员。但是由union定义的类也是可以有成员函数的。union定义的类访问权限默认为public。
http://www.sadfv.cn/news/309252/

相关文章:

  • 中国营销网站国内logo设计网站
  • wordpress 添加文章seo诊断
  • 网站建设营销型网站做网站用什么面板好
  • 什么的网站策划利用网络媒体营销来做电商网站论文
  • 在线网站推荐几个最近中文字幕2019视频1
  • 珠海网站设计网络优化中国建设银行网站地址
  • 高端品销售网站电商数据统计网站
  • 龙凤网站建设云聚达住房和城乡建设部网站投诉电话
  • 怎么通过局域网建设网站小说素材网站
  • 淘宝联盟网站模板厦门有做网站建设
  • 企业网站设计公司济南小程序开发制作
  • 制作网站书签怎么做黄页大全有哪些
  • 手机网站创建四川省住房和城乡建设局网站
  • 站长之家seo施工企业安全生产评价标准jgjt77破解版
  • 网站排名优化软件电话站酷网怎么接单赚钱
  • 做网站可以赚钱么网上书城网站开发方案
  • 赤峰做网站建设的企业用vps建网站备案
  • 有域名怎样建设网站杭州专业做网站的公司哪家好
  • 高端网站建设公司兴田德润在那里一般人公司注册费用
  • 昆明网站推广wordpress网站速度检测
  • 专业网站建设兴田德润wordpress调用热评文章
  • 跨境电商网站建设现货交易平台排行榜
  • 网站设计活动主题东莞快速做网站
  • wap网站生成微信小程序做公司网站有用吗
  • 下载建设app广州网站建设实力乐云seo
  • wordpress调用 别的网站建设局官网查询系统
  • 网站后台管理需求电商的运营模式有几种
  • 个人做网站的时代已经过去门户网站建设不断
  • 青海住房和城乡建设部网站婚纱网站设计首页
  • 西安网站制作设计找哪家wordpress首页轮播图