• <C++>学习:类与对象


    前言

    人生如逆旅,我亦是行人。


    一、类成员的访问权限

    C++ 通过 publicprotectedprivate 三个关键字来控制变量和成员函数的访问权限。它们分别表示 公有的、受保护的、私有的 ,被称为 成员访问限定符。所谓访问权限,就是你能不能使用该类中的成员。

    C++ 中的 publicprivateprotected 只能修饰类的成员,不能修饰类,C++中的类没有共有私有之分。

    • 在类的内部(定义类的代码内部),无论成员被声明为 publicprotected 还是 private,都是可以互相访问的,没有访问权限的限制。
    • 在类的外部(定义类的代码之外),只能通过对象访问成员,并且通过对象 只能访问 public 属性的成员 ,不能访问 privateprotected 属性的成员。

    下面通过一个 Student 类来演示成员的访问权限:

    #include <iostream>
    using namespace std;
    //类的声明
    class Student{
    private:  //私有的
        char *m_name;
        int m_age;
        float m_score;
    public:  //共有的
        void setname(char *name);
        void setage(int age);
        void setscore(float score);
        void show();
    };
    //成员函数的定义
    void Student::setname(char *name){
        m_name = name;
    }
    void Student::setage(int age){
        m_age = age;
    }
    void Student::setscore(float score){
        m_score = score;
    }
    void Student::show(){
        cout << m_name << "的年龄是" << m_age << ",成绩是" << m_score << endl;
    }
    int main(){
        //在栈上创建对象
        Student stu;
        stu.setname("小明");
        stu.setage(15);
        stu.setscore(92.5f);
        stu.show();
        
        //在堆上创建对象
        Student *pstu = new Student;
        pstu -> setname("李华");
        pstu -> setage(16);
        pstu -> setscore(96);
        pstu -> show();
        return 0;
    }
    
    • 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

    类的声明和成员函数的定义都是类定义的一部分,在实际开发中,我们通常将类的声明放在头文件中,而将成员函数的定义放在源文件中。

    类中的成员变量 m_name、m_age 和m_ score 被设置成 private 属性,在类的外部不能通过对象访问。也就是说,私有成员变量和成员函数只能在类内部使用,在类外都是无效的。

    成员函数 setname()、setage() 和 setscore() 被设置为 public 属性,是公有的,可以通过对象访问。

    约定:

    成员变量大都以m_开头,这是约定成俗的写法,不是语法规定的内容。以m_开头既可以一眼看出这是成员变量,又可以和成员函数中的形参名字区分开。
    • 因为 三个成员变量都是私有的 ,不能通过对象直接访问,所以必须借助三个 public 属性的成员函数来修改它们的值。下面的代码是错误的:
    Student stu;
    //m_name、m_age、m_score 是私有成员变量,不能在类外部通过对象访问
    stu.m_name = "小明";
    stu.m_age = 15;
    stu.m_score = 92.5f;
    stu.show();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    二、类的封装

    private 关键字的作用在于 更好地隐藏类的内部实现,该向外暴露的接口(能通过对象访问的成员)都声明为 public,不希望外部知道、或者只在类内部使用的、或者对外部没有影响的成员,都建议声明为 private

    • C++软件设计规范:
    实际项目开发中的成员变量以及只在类内部使用的成员函数(只被成员函数调用的成员函数)都建议声明为 private,而只将允许通过对象调用的成员函数声明为 public。

    另外还有一个关键字 protected,声明为 protected 的成员 在类外也不能通过对象访问,但是 在它的派生类内部可以访问


  • 相关阅读:
    虚拟机安装Docker
    【云原生之K8s】 K8s之持久化存储PV、PVC
    【算法】递归总结:循环与递归的区别?递归与深搜的关系?
    平衡操控应用场景和技术实现探究
    mySQL相关操作(不看是你的损失)
    Linux驱动调试方法(高级字符设备八)
    Centos7安装KingBaseES9(人大金仓V9)
    1. 梯度下降法
    CDMP考试难度怎么样?
    PgSQL-并行查询系列-介绍[译]
  • 原文地址:https://blog.csdn.net/WandZ123/article/details/124983857