C++类的三种数据成员:常量(const)、静态(static)、普通 的赋值方式

news/2024/5/18 16:16:04 标签: 类成员, 常量, 静态, 赋值

静态数据成员const就是常量数据成员既没有static也没有const那就是普通数据成员啦">C++类有三种数据成员,由声明数据成员时修饰数据成员的关键字决定:static就是静态数据成员,const就是常量数据成员,既没有static也没有const那就是普通数据成员啦!←_←

赋值感到头晕脑胀下面就来讲一下这三种数据成员通过哪些方式赋值是可行的通过哪些方式赋值又是不可行的">相信很多同学都为三种数据成员的赋值感到头晕脑胀,下面就来讲一下这三种数据成员通过哪些方式赋值是可行的,通过哪些方式赋值又是不可行的。

Talk is cheap, show me the code!

#include<iostream>
#include<string.h>
using namespace std;
// 三种数据成员:1.常量数据成员const 2.静态数据成员static 3.普通数据成员(normal)
// 四种赋值方式:1.直接初始化(在声明时就赋值) 2.先声明再通过初始化列表赋初值 3.先声明再在构造函数体里赋初值 4.先声明再在类外赋初值
class Example{
public:
    const int i_const_1 = 10;
    const int i_const_2;
    const int i_const_3;
    const int i_const_4;

    //static int i_static_1 = 10;// Error:带有类内初始值设定项的成员必须为常量
    static int i_static_2;
    static int i_static_3;
    static int i_static_4;

    int i_normal_1 = 10;
    int i_normal_2;
    int i_normal_3;
    int i_normal_4;

    Example(int t)
        : i_const_2(t)
        //, i_static_2(t)// Error:不是类"Example"的非静态数据成员或基类
        , i_normal_2(t)

        // /* // Error:"Example::Example(int t)"未提供初始值设定项:常量 成员"Example::i_const_3" 常量 成员"Example::i_const_4"
        , i_const_3(t)
        , i_const_4(t)
        // */
    {
        // i_const_3 = 10;// Error:表达式必须是可修改的左值
        // i_static_3 = 10; // error LNK2001: 无法解析的外部符号
        i_normal_3 = 10;
    }
};
//int example::i_const_4 = 10;// Error:非静态的类数据成员不能在其类的外部定义
int Example::i_static_4 = 10;
//int example::i_normal_4 = 10;// Error:非静态的类数据成员不能在其类的外部定义
int main()
{
    Example e(10);

    cout << "i_const_1: " << e.i_const_1 << endl;
    cout << "i_const_2: " << e.i_const_2 << endl;

    cout << "i_static_4: " << e.i_const_4 << endl;

    cout << "i_normal_1: " << e.i_normal_1 << endl;
    cout << "i_normal_2: " << e.i_normal_2 << endl;
    cout << "i_normal_3: " << e.i_normal_3 << endl;
}

运行结果

i_const_1: 10
i_const_2: 10
i_static_4: 10
i_normal_1: 10
i_normal_2: 10
i_normal_3: 10

赋值方式要记住了哦">可以看到,不同类型的数据成员有不同的赋值方式,要记住了哦!

数据成员类型conststaticnormal
直接初始化(在声明时就赋值×
先声明再通过初始化列表赋初值×
先声明再在构造函数体里赋初值××
先声明再在类外赋初值××

http://www.niftyadmin.cn/n/1186781.html

相关文章

一碗鸡汤

一、要成为自己的专家 1、找到自己的独特性——《发现自己的优势2.0》 2、弄清楚让我们做出决定的根本原因&#xff08;是为了亲人、朋友还是为了成就感&#xff09; 3、经验&#xff08;定期反省自己什么做对了&#xff0c;什么做错了&#xff0c;有没有更对的经验可循&…

C++中的常量函数

常量类型的函数只有权读取外部数据内容&#xff0c;但无权修改他们。 格式 <类型说明符><函数名>(<参数表>)const; 要注意的是&#xff0c;修饰符const要加在函数说明的尾部&#xff08;若放在首部的话&#xff0c;则是对函数返回值的修饰&#xff09;&am…

分门别类刷leetcode——链表(C++实现)

目录 链表结构 leetcode 206 单链表反转——&#xff08;考察指针&#xff09; leetcode 234 回文链表 leetcode 92 链表中间段逆序 leetcode21 合并两个链表 LeetCode19 删除链表的倒数第 n 个节点 leetcode 24 两两交换链表中的节点 leetcode 160 相交链表 leet…

友元函数与友元类

介绍 我们知道&#xff0c;类的私有&#xff08;private&#xff09;成员是不允许外部程序访问的&#xff0c;这是C语言的封装性。但是&#xff0c;C语言又允许少数的函数或类享受特权&#xff0c;我们称他们为友元函数和友元类&#xff0c;统称为友元。 在类的说明语句中&am…

strlen 与sizeof()的区别

这个总结的更好&#xff1a;https://blog.csdn.net/myself00/article/details/40514939 strlen(char*)函数求的是字符串的实际长度&#xff0c;它求得方法是从开始到遇到第一个\0,如果你只定义没有给它赋初值&#xff0c;这个结果是不定的&#xff0c;它会从aa首地址一直找下去…

常量函数成员奈我何

写在前面 在C中的常量函数中我们知道&#xff0c;常量函数会禁止写入和修改外部数据&#xff0c;举个例子&#xff1a; class CC{int me; public:int readme const { return me; }// 常量成员函数//void writeme(int i) const { me i; }// 不能修改其他数据 }; 原理 系统实…

利用动态规划算法解01背包问题-二维数组传参-cpp内存管理-堆和栈的区别-常见的内存错误及其对策-指针和数组的区别-32位系统是4G

1、利用动态规划算法解01背包问题 https://www.cnblogs.com/Christal-R/p/Dynamic_programming.html 两层for循环&#xff0c;依次考察当前石块是否能放入背包。如果能&#xff0c;则考察放入该石块是否会得到当前背包尺寸的最优解。 // 01 knapsack problem dynamic progra…

友元函数与运算符重载的结合

写在前面 之前的文章阐述了友元函数和友元类和运算符重载&#xff0c;当运算符重载需要调用原类的私有成员或保护成员时&#xff0c;需要将运算符函数声明为友元函数。 例子 #include<iostream> using namespace std; class Complex{// 复数类double real, imag;// 实…