IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++类中特殊的成员变量学习笔记 -> 正文阅读

[C++知识库]C++类中特殊的成员变量学习笔记

听说室友静态成员变量不知道它的作用,也听说室友const也不咋会。我反手写了这篇学习笔记。类中的数据成员不仅有int和char,而且要描述很多复杂情况,类中的数据成员可能需要在多个对象共享,也可能在对象中只进行读取不能修改。那么本博文就是讲解两种:1、用来共享数据类型的static,2、用来进行读取却不能修改的const

1、用static修饰数据成员

如果制定特定的数据在内存中,而且能够被一个类的所有成员所共享,比如设计学生类时,可以定一个属性用于统计学生的总人数。使用静态数据成员可以实现类中多个对象的数据共享和交互,静态数据成员的值对每个对象都一样,并且可以更新。只要对静态数据成员的值进行更新,所有对象都会取到更新后的值。
C++中将使用static修饰的数据成员称为静态成员,具体定义形式如下所示:

static 类型标识符 静态数据成员名称;

对于静态数据成员来说,若其被声明具有public属性,则与普通的public数据成员类似,可以通过对象在类外完成访问,访问形式如下所示:

对象.公有静态数据成员 = xx;

然而由于静态数据成员不属于任何对象,访问静态数据成员有其独特的方式,可以通过类名直接对它进行访问,而无需通过类对象,并且通常采用这种方式,访问形式如下:

类名::静态数据成员名

若想对静态数据成员进行初始化,需要在类外通过“类名::静态数据成员=初值”的方法提供初值,初始化形式如下所示:

类名::静态数据成员=初值;

1.1 案例–创建学生类计人数

在这里插入图片描述



#include<iostream>
#include<cstring>

using namespace std;

class Date{ //日期类定义
public:
    Date(int y,int m,int d);  //声明带参数的构造函数
    Date(Date &con_date);   // 声明拷贝构造函数
private:
    int m_nYear,m_nMonth,m_nDay;

};

Date::Date(int y,int m,int d):m_nYear(y),m_nMonth(m),m_nDay(d) { //定义Date类带参数的构造函数
    cout << "Date constructor!" << endl;
}

Date::Date(Date &con_date) { //定义Date类的拷贝构造函数
    m_nYear = con_date.m_nYear;
    m_nMonth = con_date.m_nMonth;
    m_nDay = con_date.m_nDay;

}

class Student {  //定义Student类
public:
    static int s_nTotalNum;   //静态数据成员
    Student(char *con_name,int con_id,Date&con_birthday);
    ~Student();
private:
    char m_gName[20];
    int m_nID;
    Date m_iBirthday;
};

//定义Student类带参数的构造函数
Student::Student(char *con_name,int con_id, Date &con_birthday): m_iBirthday(con_birthday) {
    int namelen = strlen(con_name) + 1;
    strcpy_s(m_gName,namelen,con_name);
    m_nID = con_id;
    s_nTotalNum++;//每构造一个对象,便加1
}

Student::~Student() //析构函数
{
    s_nTotalNum--;
    cout << "destructor,totalnum = " << s_nTotalNum << endl;
    if(s_nTotalNum == 0)
        system("pause");
}

int Student::s_nTotalNum = 0; //静态数据的初始化
int main()
{
    Date tombirthday(1998, 5, 20);
    //创建一个Student对象
    Student std_tom("Tom",1,tombirthday);
    cout << "Tom,the totalnum = " << std_tom.s_nTotalNum << endl;

    Date paulbirthday(1998, 4, 12);
    Student std_paul("paul",2,tombirthday);
    cout << "Paul, the totalnum = " << std_paul.s_nTotalNum << endl;
    return 0;

main函数创建两个对象,运行结果显示每创建一个对象s_nTotalNum增加1,若有一个对象的生命结束则静态数据成员减1.

2、 用const修饰数据成员

有时候希望类中的数据成员在对象使用中不被改变,可以把这样的成员定义为常数据成员,比如定义一个表示圆形的类,类中会用到圆周率的PI值,常见形式如下:

class 类名
{
	const 数据类型 数据成员;
};

常数据成员必须进行初始化并且不能被更新呢,普通数据成员可以在构造函数中通过初始化表或函数内的赋值语句给出初值,若想对常数据成员进行初始化只能通过初始化表完成,不能在构造函数内部进行赋值。常数据成员的初始化方法如下所示:

类名:: 类名(形参列表):常数据成员1(),常数据成员2(){
	构造函数体
}

2,1 利用const计算圆的面积

在这里插入图片描述

#include<iostream>
using namespace std;

class Circle {
public:
    Circle(double con_radius);
    double circumference();
private:
    double m_fRadius;
    const double PI; // 常数据成员,描述圆周率
};

//定义构造函数,常数据成员通过初始化表初始化
Circle::Circle(double con_radius):PI(3.14){
    m_fRadius = con_radius;
}

double Circle::circumference() {
    return 2 * PI * m_fRadius;
}

int main()
{
    Circle c1(2);
    cout << "circumference:" << c1.circumference() << endl;
    system("pause");
    return 0;

}

代码比较常规,在初始化表中进行常量的初始化,然后按照常规的思路进行计算,最后打印得出结果。

3、总结

本博文以描述不同复杂情况,提出static和const。static一般是多个对象共享同一个内存,多用于构造函数进行初始化,析构函数进行析构,而const必须进行初始化,初始化不能在函数内部赋值,基本上在定义表赋值。例子比较通俗。有需要的当然可以收藏。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 07:56:38  更:2021-11-25 07:57:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:47:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码