http://blog.csdn.net/roy_2008/archive/2008/05/10/2429812.aspx

本类的成员函数:

定义: 类中声明: 返回值类型 函数名(参数表) ;     //写了函数体就自动成为内联函数,这就是隐式声明。或者也可以不写,先在类中声明,在类外定义。

类外定义: 返回值类型 类名::函数名(参数表) {…};   //前面加inline就表示内联函数,这是显式声明。

调用: 对象名.公有成员函数名(参数表)                     //在这里只能访问到类的公有成员

例如: 类中声明: void SetTime( int, int , int );

类外定义: inline void Clock::SetTime( int n, int s, int t )

{ Hour = h; Minute = m; Second = s; }

          myClock.SetTime()

声明对象:

定义: 类名 对象名;

例如: Clock myClock;

本类的构造函数:

定义: 类中声明: 类名(参数表);  //可以利用重载,定义无参、有参的构造函数,赋初始值。

类外定义: 类名::类名(参数表){…}

例如: Clock::Clock() { Hour = 0; Minute = 0; Second = 0 }   // 无参的默认构造函数

Clock::Clock( int h, int m, int s )

{ Hour = h; Minute = m; Second = s; }     // 有参的构造函数

本类的拷贝构造函数:

定义: 类中声明: 类名( 类名 &对象名);

类外定义: 类名( 类名 &对象名){ 类成员的初始化…成员名= 对象名.成员名}

//其实系统会自动生成一个默认的,它把具有构造函数初始值的数据成员都复制到新建立的对象中,相当于克隆。如果自己定义的话,它其实就是使用一个已经存在的的对象,去初始化同类的一个新对象

例如: Poine::Point( Point &p )

{ X = p.X; Y = p.Y; }                   //注意这里是用参数表中的对象成员来初始化新对象

使用: 类名 新对象( 旧对象 )

例如: Point A ( B );                        //此时被自动调用

本类的析构函数:

定义: 类中声明: ~类名( );

类外定义: 类名::~类名( ){…}            //注意:它无参数,函数体中做后续工作

例如: ~Clock() {…}

~Poing() { countP--; }

组合类_构造函数:

定义: 类中声明: 类名(形参表);

类外定义: 类名::类名(所有形参)

:内嵌对象1(形参表),内嵌对象2(形参表)...{ 利用子类对象进行母类的成员初始化… }    

//其实很简单,在第一个形参表中将所有要用到的参数全部写全。然后在:后面将内嵌对象都列出来,参数写上。在函数体中利用剩下的参数对剩下的母类成员赋值

例如:   Line( Point xp1, Point xp2 );

Line::Line( Poine xp1, Point xp2 ):p1( xp1 ),p2( xp2 )

     { x = p1.GetX() – p2.GeX(); len = sqrt( x * x ); }

组合类_拷贝构造函数:

定义: 类中声明: 类名( 类名 &对象名);

类外定义: 类名::类名( 类名 &对象名 )

:内嵌对象1(形参表),内嵌对象2(形参表)...{ 利用子类对象进行母类的成员初始化… }

//与组合类_构造函数的类似

例如: Line:: Line ( Line &L ) : p1 ( L.p1 ), p2 ( L.p2 ) { len = L.len; }

本类的静态数据成员:

定义: 类中声明: static 数据类型 标识符;

    类外赋值: 数据类型 类名::标识符 = 值; //注意它不属于任何对象,只能在类外赋初值。并且它要通过非内联函数来访问

调用: 类名∷标识符

例如: static int countP;

int Point::countP = 0;

本类的静态函数成员:

定义: 类中声明: static 返回值类型 函数名(参数表) ;

    类外定义: 返回值类型 类名::函数名(参数表) {…} ;       //它一般用来访问本类的静态数据成员、静态函数成员

调用: 类名::函数名  或者  对象名.函数名

例如: static void add() { countP++; }

    Point::add() ;

Mypoint.add();

类的友元函数:

定义: 类中声明: friend返回值类型 函数名(参数表) ;

类外定义: 返回值类型 函数名(参数表) {…}; //在类中用关键字friend修饰的非成员函数,在它的函数体中可以访问类的私有和保护成员

调用: 函数名(参数表);

例如: friend float Fdist( Point &, Point & );

float Fdist( Point &p1, Point &p2 )

{ x = p1.X – p2.X; y = p2.Y – p2.Y; return sqrt ( x*x + y*y ); }

类的友元类:

定义: 类中声明: friend class 友类名;      //友类的所有函数都可以访问本类的私有和保护成员,但这种关系非传递、单向、非继承的

例如: friend class A;

类的对象指针:

定义:  类名 *对象指针名;

访问:  对象指针名->成员名(参数) 或者

    ( *对象指针名).成员名(参数)

例如:  Point p1;     //先初始化类对象

    Point *p_point;   //再定义类的对象指针

p_point = &p1   //再赋值

p1->GetX();     //最后使用,就有如通过对象名访问一样

动态创建对象:

定义及赋值:类名 *对象指针名;

赋值:     对象指针名 =  new 类名(构造函数参数表);

定义/赋值: 类名 *对象指针名 =  new类名(构造函数参数表);

访问:       对象指针名->成员名(参数) 或者

         ( *对象指针名).成员名(参数)            //和上面一样

销毁:       delete 对象指针名

例如:    Point *Ptr = new Point1( 1, 2 )

       Delete Ptr

类的对象数组:

定义: 类名 数组名[下标表达式];

调用: 数组名[下标].成员函数(参数表);     //要记得是下标从0开始计算,创建时用默认的构造函数来创建,此时初始值就派上了用场

例如: Point  A[2];

A[0].Move( i+10, i+20 );

动态创建对象数组:

定义及赋值:类名 *对象指针名 =  new 类名[下标表达式]

调用:   对象指针名[下标].成员函数(参数表)

销毁:delete [] 对象指针名

例如:Point *Ptr = new Point[2]

Ptr[2].Move( 5, 10 )

Delete [] Ptr

指向类的非静态数据的指针:(公有)

定义:   类型说明符 类名:: *指针名;

赋值:   指针名 = &类名::数据成员名;

定义/赋值: 类型说明符 类名:: *指针名=&类名::数据成员名    //要找到成员的地址,就要有&号

访问:    对象名.*类成员指针名      或者 

    对象指针名-> *类成员指针名

例如:    int Test::*vprt = &Test::value;           // 声明和初始化vPtr为Test类int型数据成员的指针

      ( *prt).*vptr                         //( *prt)是对象指针名的另一个用法

指向类的非静态函数的指针:(公有)

定义:    类型说明符 (类名:: *指针名) (参数);

赋值:    指针名 = &类名::函数成员名; 

定义/赋值: 类型说明符 (类名:: *指针名) (参数) = &类名:: 函数成员名 //注意与上面的对比. 类的非靜态成员函数编译器是需要重新改写的,以加入对this的支持也就是说你看到的函数原型非不是最终的函数原型,所以它的指针就还有另外一个特性,即它所属的类。但是类的静态成员就不同,它没有this, 和普通函数一样

访问:    (对象名.类成员指针名)(参数表)        或者 

       (对象指针名-> *类成员指针名)(参数表)

例如:   int ( Point:: *p_GetX) () = &Point::GetX();

    (A. *p_Getx) ()

      (p1-> *p_GetX) ();

指向类的静态数据的指针:

定义/赋值: 类型说明符 *指针名=&类名:静态数据成员名   //与非静态成员相比,少了类名.有没有这种静态的指针都无所谓,因为它就是个普通类型的指针

访问:   *指针名

例如:   int *count = &Point::countP;

   *count

指向类的静态函数的指针:

定义及赋值:类型说明符 (*指针名)(参数)=&类名::函数名    //静态类成员函数的指针是普通类型指针

访问:   指针名(参数)

例如:   void (*gptr)() =& Point::GetC;

   gptr();

转载于:https://my.oschina.net/alphajay/blog/5758

有关于类的定义赋值与调用总结相关推荐

  1. 定义一个 圆形 Circle类 , 定义其中的长度length属性,定义一个求面积getArea()的方法。 并编写一个测试类,进行长度的赋值和展示,并调用求面积方法展示面积值。

    定义一个 圆形 Circle类 , 定义其中的长度length属性,定义一个求面积getArea()的方法. 并编写一个测试类,进行长度的赋值和展示,并调用求面积方法展示面积值. public cla ...

  2. Scala类的定义,主/辅构造器,以及方法中的变量定义,单例对象,伴生对象,Apply方法调用,应用程序对象

    1. 类 1.1. 类的定义 package cn.toto.scala.day2/*** 在Scala中,类并不用声明为public类型的.* Scala源文件中可以包含多个类,所有这些类都具有共有 ...

  3. 1)编写Animal接口,接口中声明run()方法; 2)定义Bird类和Fish类实现Animal接口; 3)编写Bird类和Fish类的测试程序,并调用其中的run()方法

    /*1)编写Animal接口,接口中声明run()方法:   2)定义Bird类和Fish类实现Animal接口:   3)编写Bird类和Fish类的测试程序,并调用其中的run()方法 */ in ...

  4. 【Groovy】闭包 Closure ( 闭包调用 与 call 方法关联 | 接口中定义 call() 方法 | 类中定义 call() 方法 | 代码示例 )

    文章目录 总结 一.接口中定义 call() 方法 二.类中定义 call() 方法 三.完整代码示例 总结 在 实例对象后使用 " () " 括号符号 , 表示调用该实例对象的 ...

  5. 某IT公司有多名员工,按员工负责的工作不同,进行了部门的划分(研发部员工、维护部员工)。完成员工体系中所有类的定义,并指定类之间的继承关系。进行xx工程师类的对象创建,完成工作方法的调用。

    某IT公司有多名员工,按员工负责的工作不同,进行了部门的划分(研发部员工.维护部员工).研发部根据所需研发的内容不同,又分为JavaEE工程师.Android工程师:维护部根据所需维护的内容不同,又分 ...

  6. php面向对象程序设计,PHP面向对象程序设计类的定义与用法简单示例

    本文实例讲述了PHP面向对象程序设计类的定义与用法.分享给大家供大家参考,具体如下: class Person { private $name; private $sex; private $age; ...

  7. 5.对象和面向对象3——类的定义

    为什么80%的码农都做不了架构师?>>>    Python 是完全面向对象的:你可以定义自已的类,从自已的或内置的类继承,然后从你定义的类创建实例. 在 Python 中定义类很简 ...

  8. 【设计模式】享元模式 实现 ( 实现流程 | 抽象享元类 | 具体享元类 | 享元工厂 | 用户调用 | 代码模板 )

    文章目录 I . 享元模式 实现流程 II . 享元模式 抽象享元类 III . 享元模式 具体享元类 IV . 享元模式 享元工厂 V . 享元模式 用户调用 I . 享元模式 实现流程 1 . 定 ...

  9. 对集合变量定义赋值_SpringBoot配置加载原理(自定义加载配置)

    前言 在SpringBoot应用程序中会有很多的地方定义配置文件,如: bootstrap.properties application.properties 或者是SpringCloud中定义的远程 ...

  10. python定义匿名函数关键字_python语言的匿名函数、7种可调用对象以及用户定义的可调用类型...

    匿名函数 在python表达式中,用来创建匿名函数的是lambda关键字. lambda函数在python语言中只能使用纯表达式,也就是说,在lambda函数体中不能使用while和try,当然也不能 ...

最新文章

  1. const修饰的指针常量和常量指针
  2. python读excel表格
  3. USB 摄像头成熟方案介绍
  4. 学习分享会(2019.5.31)
  5. 每日一题(23)——malloc与free(四)
  6. pl/sql developer 中文字段显示乱码
  7. Windows平台JDK安装
  8. RDD DataFrame DataSet 区别和转换
  9. 汽车故障检测仪计算机教程,如何使用汽车故障诊断仪进行汽车维修
  10. 刷python题库的网站_大神教你刷bios工具
  11. 汽车故障诊断方法及注意事项
  12. 爬虫---涨跌停股票池信息----(东方财富)
  13. 数据库防火墙的性能和高可用性分析
  14. win10 安装yolov7 训练自己的数据集
  15. 【山大会议】私人聊天频道 WebRTC 工具类
  16. 情不知何起,文章不知何起
  17. 【crypto】基于crypto.js的web前端加解密系统实现
  18. 分享为部门做的《Qt入门介绍》PPT课件
  19. 电视图像信号的发送和接收
  20. ArrayList底层原理

热门文章

  1. ******多个政府网站 嫌犯潜逃永州落网
  2. Javascript命名禁区有哪些
  3. 仿微信app项目流程
  4. java new对象_Java中new一个对象是一个怎样的过程?JVM中发生了什么?
  5. Python基础--01
  6. 2.项目介绍,数据库迁移(code first)
  7. linux增加datavg的大小,linux lvm扩容
  8. 如何验证 nginx.conf 是否配置正确
  9. Python pip 命令详解
  10. JMeter接口测试入门