c++...常量对象与const成员函数-创新互联
笔者为计科大一菜鸡,此文章的初衷只是为了督促自己做点笔记,内容仅供参考,请大家理性看待!
创新互联公司是一家专业提供大观企业网站建设,专注与成都网站制作、成都网站建设、H5技术、小程序制作等业务。10年已为大观众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。常对象和常成员的建立,规定了程序中各种对象的变与不变的界限,增强了程序的安全性
常对象定义格式:()
类型 const 对象名;/ const 类型 对象名;
(上图中包含一些错误示范)! c++不允许常对象调用类的任何普通成员函数,且常对象一旦定义,在其生存周期内不允许改变!!
常成员函数--任何不修改数据成员的函数都应该声明为const类型!在编写const函数时,若不慎修改了数据成员,或调用了非const成员函数,则无法通过编译!
常成员函数的说明格式:
返回类型 成员函数名 (参数表) const;
若在类内部只对常函数进行了定义而没有说明其功能,那么在类外对常函数功能进行说明时也需要加上const!下面为正确与错误的区分,(随便写的编译不能通过)
#includeusing namespace std;
class Date
{
private:
int Y,M,D;
public:
Date (int y=0,int m=0,int d=0)
{
Y=y;M=m;D=d;
}
int month() const;
};
(!!!incorrect)int Date::month()
{ return M; }
(!!!correct)int Date::month() const
{ return M; }
不能在类声明中初始化const数据成员!下面为错误示范:
SIZE在程序运行时通过构造函数赋值,编译时SIZE其实还没有值。
class A
{
const int SIZE =200;
int array[SIZE];
}
因此const数据成员的初始化只能在类构造函数的初始化表中进行,正确做法如下:
class A
{
const int SIZE ;
A(int size)//构造函数
}
A::A(int size):SIZE(size)//第三个冒号后面的内容为初始化表
{...}
A a(100);//对象a的SIZE值为100
A b(200);//对象b的SIZE值为200
//如果是普通成员则这样写也是可以的,初始化表也不是只能为consst数据成员进行初始化
class A
{
int SIZE ;
A(int size)//构造函数
}
A::A(int size):SIZE(size)//第三个冒号后面的内容为初始化表
{...}
//如果是普通成员也可以这样写
class A
{
int SIZE ;
A(int size)//构造函数
}
A::A(int size)
{SIZE=size;
...}
如何给常引用赋初值?如下:
class A
{
private:
const int a=100;//常数据成员
const int& r;//常引用数据成员
public:
A(int i):r(a)//常数据成员只能通过初始化列表来获得初值
{...};
};
#静态成员( 包括静态数据成员和静态函数成员 ),用以解决同一个类的不同对象之间数据成员和函数的共享问题,其特点是:不管这个类中创建了多少个对象,其静态成员在内存中只保留一份拷贝,这个拷贝为该类的所有对象所共享。
##静态数据成员
在类内声明静态数据成员的格式为:
static 数据类型 静态数据成员名;如:static double a;
在类外初始化的形式为:
数据类型 类名:: 静态数据成员名=初始值;
当然,静态常数据成员可以在类内定义的同时对其进行初始化,但静态非常数据成员不行;
如:static const int a=2; 是正确的语句
静态数据成员 | 静态常数据成员 |
只能类内定义,类外初始化 | 既能类内定义,类外初始化 |
=_=^} | 也能在类内定义的同时初始化 |
##静态成员函数
静态成员函数是为类的全体对象服务的;静态成员函数无法处理类中非静态函数变量,也不允许使用this指针;
实例1:
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
网站栏目:c++...常量对象与const成员函数-创新互联
本文路径:http://ybzwz.com/article/doihis.html