1、成员变量

成员变量可以是任何类型,如基本数据类型、引用、另一个类的对象或指针、自身类的引用或指针,但不能是自身类的对象;

成员变量不能指定为auto、register、extern 存储类型。

1.1、普通成员变量

普通成员变量是属于对象的,其生命周期就是对象的生命周期,只能通过构造函数的初始化列表进行初始化,也可以在构造函数中赋值。

如果是成员变量是一个类的对象,那么只能并且必须使用初始化列表。

1.2、常成员变量(const)

常成员变量是属于对象的,其生命周期就是对象的生命周期,在这个生命周期中其值是不可改变的。

常成员变量不能在类的内部初始化,在类的内部只是声明,只能通过构造函数的初始化列表进行初始化,并且必须进行初始化

常变量只能初始化不能赋值,所以在构造函数中赋值,或者使用自定义的成员函数赋值 都是错误的。

#include <iostream>
using namespace std; class Example
{
public:
Example(double pi):PI(pi){} //必须有使用初始化列表的构造函数
double GetPi(void){return PI;}
private:
const double PI; //不能在类内初始化
}; int main(void)
{
Example ex(3.1415);
cout << ex.GetPi() <<endl;
return ;

1.3、静态成员变量(static)

静态成员变量是属于整个类的,整个类(所有类的对象中)只有一份拷贝,相当于类的全局变量(这是对于同一进程内而言, 多进程间无效)。

静态成员变量不能在类的内部初始化,在类的内部只是声明,定义必须在类外,定义时不能加上static关键字,

定义时可以指定初始值,也可以不指定,不指定时系统默认其初始值为0.

静态成员变量同样遵守public\private\protected限定,当静态成员变量是公有成员时可以使用下面2种方式访问,推荐使用第一种.

// Method One
类名::静态成员变量名 //Method Two
对象名.静态成员变量名 

例子:

#include <iostream>
using namespace std; class Example
{
public:
static char chval; //声明
static int GetInt(void){return ival;}
private:
static int ival; //声明
};
char Example::chval = 'A'; //定义(指定初始值)
int Example::ival; //定义(未指定初始值) 相当于 int Example::ival = 0; int main(void)
{
Example ex;
cout << ex.GetInt() << endl; //未初始化时,静态变量被默认初始化为0; cout << ex.chval << endl; //通过对象访问
Example::chval = 'B';
cout << Example::chval << endl; //通过类名访问 return ;

1.4、静态常量成员变量(const static)

通过前面介绍的 常成员变量 和 静态成员变量 ,我们知道常成员变量在对象的生命周期中恒不变,静态成员变量在整个类中全局可变。

现在想要定义一个成员变量在整个类中不可变,应该怎样定义呢?

就是将 常成员变量 和 静态成员变量 结合起来,使用const static 或者 static const定义变量,注意2者没有区别。当然使用enum定义也是很好的方法。

常静态成员变量有2种初始化的方式,1种是在类内(声明时)初始化,另一种是在类外初始化,类外初始化时要加const限定不能加static限定。

另外,需要注意一点 静态常量成员变量 分为 整型 和 非整型, 非整形情况下g++与vs是不同的,g++允许非整形静态常量类内初始化,vs不允许.

class Example
{
private:
//整型
const static char ch = 'a';
const static short sht = ;
const static long lng = ;
const static int a = ; //类内初始化
static const int b; //等价于 const static int b;
//非整型
const static float c = 1.1; //注意:这种写法在vs中是编译不过的,但是g++可以
static const double d;
};
const int Example::b = ; //类外初始化,一定要加const限定
const double Example::d = 2.2;

1.5、总结

1.5.1、成员变量的生命周期

成员变量的种类
生命周期
普通成员变量  同对象
常成员变量  同对象,其值不可变
静态成员变量  整个类
常静态成员变量 整个类,其值不可变

1.5.2、类中成员变量的初始化方式

成员变量的种类 初始化方式
普通成员变量  构造函数参数列表
常成员变量  构造函数参数列表
静态成员变量  类外
常静态成员变量 类内 和 类外

2、成员函数

2.1、普通成员函数

普通成员函数可以访问该类的所有成员变量 和 成员函数。

2.2、常成员函数(const)

将函数设置为常成员函数,可以禁止成员函数修改数据成员。

设置的方法是在函数的参数列表后面加上const,注意类内声明和类外定义都要加const限定。

class Example
{
public:
char GetChar(void)const //函数中不能修改成员变量
{
return ch;
}
void SetInt(int a)const; private:
char ch;
int i;
};
void Example::SetInt(int a)const //类外定义时也要加const
{
// i = a; //ERROR:函数中不能修改成员变量
}

2.3、静态成员函数(staitc)

静态成员函数是属于整个类的,它只能访问该类的静态成员变量 和 其他静态成员函数。

静态成员函数同样遵守public\private\protected限定,当静态成员函数是公有成员时可以使用下面2种方式访问,推荐使用第一种.

// Method One
类名::静态成员函数名 //Method Two
对象名.静态成员函数名 

例子:

class Example
{
public:
static double db; static void InitChar(void){ch = ;}
static void InitInt(void){i = ;}
static void InitData(void);
void InitData2(void);
private:
static char ch;
static int i;
float ft; };
double Example::db = 3.1415;
char Example::ch = 'A';
int Example::i = ; void Example::InitData(void) //类外定义,不能加static限定
{
InitChar(); //访问静态成员函数
InitInt(); //访问静态成员函数
db = ; //访问静态成员变量
}
void Example::InitData2(void) //普通成员函数能访问所有的成员
{
InitData(); //访问静态成员函数
ft = ; //访问普通成员变量
db = ; //访问静态成员变量

2.4、构造函数

http://www.cnblogs.com/LubinLew/p/Cpp-ConstructorFunction.html

2.5、析构函数

http://www.cnblogs.com/LubinLew/p/Cpp-DeconstructorFunction.html

C++类的成员的更多相关文章

  1. C++点滴----关于类常成员函数

    关于C++中,类的常成员函数 声明样式为:   返回类型 <类标识符::>函数名称(参数表) const 一些说明: 1.const是函数声明的一部分,在函数的实现部分也需要加上const ...

  2. c++函数模板作为类的成员函数,编译报错LNK2019的解决方法

    为了使某个类的成员函数能对不同的参数进行相同的处理,需要用到函数模板,即template<typename T> void Function(). 编译时报错LNK2019 解决方法: 1 ...

  3. fielderror里的fieldName代表的是jsp里的fieldName还是Action类的成员变量?(待解答)

    1.值栈的Action对象中会有一个fielderror属性,代表着字段错误. fielderror是Map<String,List<String>>类型 例如下面的值栈里可看 ...

  4. [.net 面向对象编程基础] (10) 类的成员(字段、属性、方法)

    [.net 面向对象编程基础] (10) 类的成员(字段.属性.方法) 前面定义的Person的类,里面的成员包括:字段.属性.方法.事件等,此外,前面说的嵌套类也是类的成员. a.类的成员为分:静态 ...

  5. 深入理解PHP内核(十四)类的成员变量及方法

    原文链接:http://www.orlion.ga/1237/ 类的成员变量在PHP中本质是一个变量,只是这些变量都归属于某个类,并且给这些变量是有访问控制的. 类的成员方法在PHP中本质是一个函数, ...

  6. [javaSE] 反射-获取类的成员属性和构造方法

    成员属性和构造方法皆为对象,通过Class对象的方法可以得到 package com.tsh.reflect; import java.lang.reflect.Constructor; import ...

  7. [转载]能不能同时用static和const修饰类的成员函数?

    题目(一):我们可以用static修饰一个类的成员函数,也可以用const修饰类的成员函数(写在函数的最后表示不能修改成员变量,不是指写在前面表示返回值为常量).请问:能不能同时用static和con ...

  8. 回调函数中使用MFC类的成员或对话框控件的简单方法

    在MFC的很多程序中,常常需要在回调函数中调用MFC类的类成员变量.类成员函数,亦或者对话框控件的句柄.由于回调函数是基于C编程的Windows SDK的技术,而类成员又有this指针客观条件限制.. ...

  9. Python全栈--9.1--面向对象进阶-super 类对象成员--类属性- 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理

    上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...

  10. (转)c++类的成员函数存储方式(是否属于类的对象)---一道面试题引发的思考

    昨天去面试一家公司,面试题中有一个题,自己没弄清楚,先记录如下: class D { public: void printA() { cout<<"printA"< ...

随机推荐

  1. python控制台输出带颜色的文字方法

    #格式: 设置颜色开始 :\033[显示方式;前景色;背景色m   注意:开头部分的三个参数:显示方式,前景色,背景色是可选参数,可以只写其中的某一个:另外由于表示三个参数不同含义的数值都是唯一的没有 ...

  2. Flask插件wtforms、Flask文件上传和Echarts柱状图

    一.wtforms 类比Django的Form组件Form组件的主要应用是帮助我们自动生成HTML代码和做一些表单数据的验证 flask的wtforms用法跟Form组件大同小异参考文章:https: ...

  3. linux服务器间文件夹拷贝

    要求,在A机器执行脚本,把A机器的某个目录文件拷贝到B机器. 第一版ftp实现: 1.A 机器先安装 ftp 客户端 $ sudo yum install ftp 2.B机器安装ftp服务端 $ su ...

  4. cogs2479 偏序(CDQ套CDQ)

    题目链接 思路 四维偏序 \(CDQ\)套\(CDQ\),第一维默认有序.第二维用第一个\(CDQ\)变成有序的.并且对每个点标记上第一维属于左边还是右边.第二个\(CDQ\)处理第三维,注意两个\( ...

  5. pillow的用法

    这是原图 from PIL import Image im=Image.open('C:/Users/history/Desktop/微信图片_20190408110611.jpg') r,g,b=i ...

  6. Eclipse 运行导入的 Java 项目时,Error:A JNI error has occurred

    出现场景 导入 Java 项目,运行时,出现:Error:A JNI error has occurred.... 解决方式 该项目的 Build Path , 在Libraries 中删除后重新添加 ...

  7. log4net在C#项目里的配置

    做个记录,这个可用.每次新项目配置从网上找来的都要配半天 这里不说这是什么,从哪来,为什么这样配置 App.config或其他.config文件里加入如下配置 <log4net> < ...

  8. python django(forms组件)

    forms组件最大的作用,就是做数据校验. 普通做法,一个一个写校验规则,没有解耦.校验规则,都在视图函数里面. 网页校验 修改urls.py,增加路径addbook from app01 impor ...

  9. .NET面试题系列(十六)数据库面试题

    数据库事务的四大特性 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚.因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响. ...

  10. [再寄小读者之数学篇](2014-10-27 Frobenius 范数是酉不变范数)

    对任两酉阵 $U,V$, 有 $$\bex \sen{A}_F=\sen{UAV}_F. \eex$$ 事实上, $$\beex \bea \sen{UAV}_F^2&=\tr(V^*A^*U ...