• 常数据成员(1)


    常数据成员

    #include 
    using namespace std;
    #include 
    
    class person
    {
    
    public:
      const int age=80;//常数据成员可以在定义的时候初始化
      const string name;
    
    public:
      person() ;
    };
    
    person::person():age(age),name(name)//常数据成员也可以使用初始化列表初始化.
    {
        //但是不能在构造函数内使用赋值的方式初始化
      cout<<age<<endl;
      cout<<this->age<<endl;
    cout<<"调用构造函数"<<endl;
    }
    
    int main()
    {
    
      person *boy = new person();
      cout << "m_age: " << boy->age << endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    常函数

    #include 
    #include 
    using namespace std;
    char a;
    class person
    {
    private:
      int age;
      string name;
      const int age_f;
      const string name_f;
      // char *pointer = nullptr;//这样会导致空指针赋值
      char *pointer;
    
    public:
      person(int age = 0, string name = "aa", int age_f = 2, string name_f =    "bb");
                      
      void print();
    
      void print_f(char *) const;
    };
    
    person::person(int age, string name, int age_f, string name_f) : age(age), name(name), age_f(age_f), name_f(name_f)
    {                                         //这里通过缺省参数,实现了对const数据成员的初始化,实际上也就算是初始化列表
      pointer = new char[20];    
      cout << "aaaaaaaa" << endl;
    };
    // string类封装好了,不存在浅拷贝。
    void person::print() //非const成员函数可以调用const和非const
    {
      cout << "age:" << age << "name:" << name << endl;
      cout << "age_f:" << age_f << "name_f:" << name_f << endl;
    };
    void person ::print_f(char *new_pointer) const
    {
      // pointer=new_pointer;//这样是不被允许的
    
      //   //如果是需要拷贝数据的话,先得给pointer 分配空间(由于这里是const函数,所以我把空间分配放到构造函数里去)再memcpy 或者strcpy
    
      strcpy(pointer, new_pointer);                             //这样是被允许的只改变值   //  *pointer=*new_pointer;
      cout << "age_f:" << age_f << "name_f:" << name_f << endl; // const成员函数只能 调用const成员,不能调用非const成员。
      // cout << "age:" << age << "name:" << name << endl;
    
      // 若将成员函数声明为const,则不允许通过其修改类的数据成员。
      // 值得注意的是,如果类中存在指针类型的数据成员即便是const函数只能保证不修改该指针指向的对象,也就是指针变量名不被允许修改,并不能保证不修改指针指向的值,也就是*pointer可被修改。
    };
    int main()
    {
      const person *boy = new person(); //定义常对象;常对象只能调用常函数
    
      char *pointer = (char *)"aabbccdd";
      boy->print_f(pointer);
    
      char *ppointer = (char *)"plmplm";
      person *gril = new person();
      gril->print();
      gril->print_f(ppointer);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
  • 相关阅读:
    CSS基础入门笔记(选择器)
    BVH动捕文件导入到E3D骨骼树
    Java集合概述
    【毕业设计】Stm32酒驾检查系统 - 单片机 嵌入式 物联网
    leetcode1036. 逃离大迷宫(java)
    archery安装测试
    第11章_数据库的设计规范
    如何写出优美的代码
    JVM 执行引擎部分 (编译器、解释器)
    HTTP 协议的基本格式和 fiddler 的用法
  • 原文地址:https://blog.csdn.net/qq_55125921/article/details/126084509