常对象及常成员及静态数据成员和静态成员函数的学习内容。
2016-05-19 17:09
351 查看
常对象和常成员其实与常量的概念很接近,都是不可更改初始化值,但由于是在涉及到类,所以操作这些数据变得有点复杂,有很多需要注意的地方!
因为这方面的内容涉及到指针,所以先在这里回顾以前所学的指向常量的指针和指针常量。
const int *p; //指向整型常量,指针值可改(可指向其它整形常量),但不可以修改指针指向对象的值。
int * const p; //指向整型量的常指针,可通过*p修改对象的值(指向对象为非常量的情况),但指针值不可修改。
//所以一般定义常指针时便进行初始化,int *const p=&a;
指向常量的指针和指针常量还有常量其实挺好理解的,但接下来写的常对象和常成员相比就复杂得许多。
(在这之前先补充下指向对象的指针定义形式: Student *pt=&stud1;)
① 常对象定义的一般形式:
类名 const 对象名 (实参列表);
const 类名 对象名 (实参列表); //二者等价。
常对象的性质:常对象里的所有数据成员都不可修改值(除了在类中已经声明了为可变量的数据成员),且只能通过类中常函数访问。
②常数据成员定义的一般形式:
数据类型 const 常量名;
const 数据类型 常量名; //二者等价。
常数据成员的性质:
其值不可以被赋值,只能在调用对象时运行构造函数是用初始化的方式进行初始化赋值(只能用:类名 ::类名(形参列表):常量名(),.............{}这种方式进行初始化)。可以被const函数和非const函数引用。
③常成员函数定义的一般形式:
数据类型 函数名() const; //const的位置在括号后面。
并且在类体外定义函数时也要在后面加const。
常成员函数的性质:
可以访问同类中的常数据成员和非常数据成员,还有常对象的数据成员,但不可以改变其值。
④静态数据成员定义的一般形式:
static 数据类型 变量名;
静态数据成员的初始化:
静态数据成员只允许在类外进行初始化,形式为: 数据类型 类名::静态数据成员名=初值;
静态数据成员的性质:
静态数据的值是可变的,并且让同类对象共用,静态数据存储不在对象中,单独开辟的空间,方便同类对象共用,
静态数据成员的引用:
可通过类名和对象名进行引用,形如:cout<<a.height; cout<<Box::height; //假设height已经声明为静态数据成员。两种引用方式等价。
⑤静态成员函数定义的一般形式:
在类中声明: static 数据类型 函数名();
在类外定义时只需用一般形式,不必加sconst。
静态成员函数的性质:
静态成员函数是类的一部分,不存储在对象中,但可以同过类名和对象名调用函数,且在静态成员函数可以直接引用同类中的静态数据成员,
不用加类名或者对象名,但应为静态成员函数没有this指针,所以引用非静态数据成员时需要加对象名。
因为这方面的内容涉及到指针,所以先在这里回顾以前所学的指向常量的指针和指针常量。
const int *p; //指向整型常量,指针值可改(可指向其它整形常量),但不可以修改指针指向对象的值。
int * const p; //指向整型量的常指针,可通过*p修改对象的值(指向对象为非常量的情况),但指针值不可修改。
//所以一般定义常指针时便进行初始化,int *const p=&a;
指向常量的指针和指针常量还有常量其实挺好理解的,但接下来写的常对象和常成员相比就复杂得许多。
(在这之前先补充下指向对象的指针定义形式: Student *pt=&stud1;)
① 常对象定义的一般形式:
类名 const 对象名 (实参列表);
const 类名 对象名 (实参列表); //二者等价。
常对象的性质:常对象里的所有数据成员都不可修改值(除了在类中已经声明了为可变量的数据成员),且只能通过类中常函数访问。
②常数据成员定义的一般形式:
数据类型 const 常量名;
const 数据类型 常量名; //二者等价。
常数据成员的性质:
其值不可以被赋值,只能在调用对象时运行构造函数是用初始化的方式进行初始化赋值(只能用:类名 ::类名(形参列表):常量名(),.............{}这种方式进行初始化)。可以被const函数和非const函数引用。
③常成员函数定义的一般形式:
数据类型 函数名() const; //const的位置在括号后面。
并且在类体外定义函数时也要在后面加const。
常成员函数的性质:
可以访问同类中的常数据成员和非常数据成员,还有常对象的数据成员,但不可以改变其值。
④静态数据成员定义的一般形式:
static 数据类型 变量名;
静态数据成员的初始化:
静态数据成员只允许在类外进行初始化,形式为: 数据类型 类名::静态数据成员名=初值;
静态数据成员的性质:
静态数据的值是可变的,并且让同类对象共用,静态数据存储不在对象中,单独开辟的空间,方便同类对象共用,
静态数据成员的引用:
可通过类名和对象名进行引用,形如:cout<<a.height; cout<<Box::height; //假设height已经声明为静态数据成员。两种引用方式等价。
⑤静态成员函数定义的一般形式:
在类中声明: static 数据类型 函数名();
在类外定义时只需用一般形式,不必加sconst。
静态成员函数的性质:
静态成员函数是类的一部分,不存储在对象中,但可以同过类名和对象名调用函数,且在静态成员函数可以直接引用同类中的静态数据成员,
不用加类名或者对象名,但应为静态成员函数没有this指针,所以引用非静态数据成员时需要加对象名。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Python动态类型的学习---引用的理解
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- 土人系列AS入门教程 -- 对象篇
- C#托管堆对象实例包含内容分析
- C#实现获取不同对象中名称相同属性的方法
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- javascript asp教程第十一课--Application 对象
- PowerShell中使用Out-String命令把对象转换成字符串输出的例子
- VBS教程:对象-正则表达式(RegExp)对象
- C++联合体转换成C#结构的实现方法
- C#检查指定对象是否存在于ArrayList集合中的方法
- sql2008启动代理未将对象应用到实例解决方案
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题