常数据成员

类型修饰符const不仅可以说明成员函数,也可是说明数据成员

由于const类型对象必须被初始化,并且不能更新,因此,子啊类中说明了const数据成员时,只能通过成员初始化列表的方式来生成构造函数对数据成员的初始化。


//A.h
#pragma once

class A
{
public:
A(int i);
void print();
const int &r;
private:
const int a;
static const int b;
};

//A.cpp
#include "A.h"
#include <iostream>
using namespace std;

const int A::b=10;
A::A(int i):a(i),r(a)
{

}
void A::print()
{
cout << a << ":" << b << ":" << r << endl;
}
void main()
{
A a1(100),a2(0);
a1.print();
a2.print();
system("pause");
}

结果:
100:10:100
0:10:0
请按任意键继续. . .

在该程序中,设置了如下3个常类型数据成员:

const int &r; const int a; static const int b;

其中,r是常int型引用,a是常int型变量,b是静态常int型变量。程序中对静态数据成员b进行初始化。值得注意的是构造函数的格式如下所示:

A(int i):a(i),r(a){}

其中,冒号后边是一个数据成员初始化列表,它包含两个初始化项,用逗号进行分隔,因为数据成员a和r都是常类型的,需要采用初始化格式。

时间: 2024-08-30 03:18:40

常数据成员的相关文章

C++ 常成员函数、常数据成员、常对象

常成员函数在声明和实现时都要带 const 关键字 常成员函数不能修改对象的数据成员,也不能访问类中没有用 const 声明的非常成员函数. 在任何函数中都不能对常数据成员赋值.对常数据成员初始化,只能通过构造函数的初始化列表. 常对象的数据成员在它的生存期内不会被改变,因此定义常对象时必须对其进行初始化.这里的初始化可以通过初始化列表完成,也可以通过构造函数函数体来完成. class Person { public: string name; Person() { name = "mollnn

类之静态成员以及常对象、常成员

一.静态成员:static修饰,每个类只有一份拷贝,为所有该类的对象所共用. 1.静态数据成员: 类内声明.类外初始化.和全局变量一样,在数据段里分配内存. eg: class A{ static int co; }; int A::co=0; 2.静态成员函数: 1).静态成员函数专门用来存取类的静态成员,不可访问非静态成员,没有this指针.由static在类内声明,可以在类外定义,此时不需要static作为前缀. eg: class A{ static int co; static int

c++常对象和常成员函数

常对象: 定义常对象的一般形式为: 类名 const 对象名[(实参表列)]; 也可以把const写在最左面: const 类名 对象名[(实参表列)]; 二者等价. 常对象的所有成员值都不能变,必须先初始化,不能调用非const成员函数 const成员函数: void get_time( ) const ; //将函数声明为const 不能改变类中的成员值们可以访问,若非要改变,可以把成员变量设置为mutable. const是函数类型的一部分,在声明函数和定义函数时都要有const关键字 不

C++之类的常成员

类的常成员与类的静态成员相似.类的常成员包括常数据成员和常成员函数. 常数据成员 在类的成员定义中,使用修饰符const说明的数据成员称为常数据成员.常数据成员必须初始化,并且它的数值不能被更新.常数据成员是通过构造函数的成员初始化列表进行初始化的. 还是举例说明常数据成员: <span style="font-size:18px;">#include <iostream.h> class A { public: A(int i);//定义的构造函数 void

const常对象成员与常成员函数

#include <iostream>#include <string>using namespace std;class pt{public: pt(int a,int b){this->x=a,this->y=b;} int getX() const {return this->x;} //此处必须加const(关键),否则A.getX()将无法正常调用 int getY() const {return this->y;} //因否则的话A.getX()

C++易错知识点整理

目录 构造函数 析构函数 复制构造函数 组合类的构造函数 const 异常接口声明 异常处理中的构造与析构 类的派生 继承方式 虚基类 派生类的构造函数 派生类的复制构造函数 类的内联成员函数 动态创建基本类型的变量 动态创建类的对象 动态创建数组类型的对象 删除动态申请的内存 运算符重载规则 对于和--的重载 需要重载为非类成员函数的情况 指针和数组 函数指针 this指针 指向类的非静态成员的指针 指向类的非静态成员的指针 数组初始化 字符数组 结构体 联合体 结构体成员初始化 函数模板 类

在c++这片神秘的大陆上

在c++这片神秘的大陆上,有一个无往而不利的地下王国,据说其手段血腥残忍,却深得民心,因为,他们是侠,是剑胆琴心,诗肠酒骨的侠客,他们不知解决了多少疑难杂症,除去了多少问题漏洞,而他们的首领->类,则是一个更为神秘的存在,传说其有九千张面孔,其手下赫赫有名的分别是:构造,析构,静态, 常,普通,当然还有一把绝世神兵this,相当于召唤门,除了静态没有,其他成员都有 ,以及其侠客团->对象. 静态就像一个妖娆的美女 , 看似静如月 ,实则动如烈火,心思玲珑,变幻莫测,潜 伏类的身侧 ,对外她是直

C/C++面试题目一

C/C++开发工程师面试题目(一)(附答案分析) 推荐:自己根据在面试中碰到做过的一些题目以及总结的题目,希望对面试的同学有所帮助. 一. 选择题 1. 下列类中(  )不是输入输出流类iostream的派生类. A. fstream      B. ofstream     C. strstream    D. ostrstream 答案:BD 解析:ofstream和ostrstream派生自ostream,而不是iostream.                              

C++ 重点归类(软考准备)

又一次参加了等级考试,不得不说自己的脸皮真的很厚,但是反复的考试.反复的学习也让自己对C++这门语言有了更深的认识.回顾一下比较重要的一些知识点大概如下所示: 重载 重载包括函数重载和运算符的重载.函数重载指一个函数名对应对各函数的实现.每种实现对应一个函数体,这些函数的名字相同,其参数类型或个数不同,但不能出现函数返回类型不同而参数类型和个数相同的重载,简言之就是参数的类型和个数有所不同的函数才可以称得上是重载.运算符的重载有以下规则需要注意: 1.不允许用户自定义新的运算符,只能对已有的运算