首页 > 其他分享 >public, private, protected 访问权限

public, private, protected 访问权限

时间:2024-07-07 19:42:40浏览次数:18  
标签:访问控制 private 访问 protected 权限 public

在C++中,封装(Encapsulation)是面向对象编程的一个基本概念。它通过将数据和方法封装在类中来隐藏内部实现细节,并通过访问控制来保护数据的完整性和安全性。C++提供了三种访问控制权限:public、private 和 protected。下面详细介绍这三种访问权限及其用法。

public 访问权限

public 成员可以被任何地方访问,不受访问限制。它们通常用于接口部分,即希望在类外部访问的方法和数据成员。

示例代码:

#include <iostream>

class MyClass {
public:
    int publicVar;

    void publicMethod() {
        std::cout << "Public method called. PublicVar = " << publicVar << std::endl;
    }
};

int main() {
    MyClass obj;
    obj.publicVar = 42;          // 可以直接访问 public 成员
    obj.publicMethod();          // 可以直接调用 public 方法
    return 0;
}

private 访问权限

private 成员只能在类的内部访问,类的外部无法直接访问。它们通常用于隐藏类的内部实现细节,只能通过类的公有接口进行访问。

示例代码:

#include <iostream>

class MyClass {
private:
    int privateVar;

    void privateMethod() {
        std::cout << "Private method called. PrivateVar = " << privateVar << std::endl;
    }

public:
    void setPrivateVar(int val) {
        privateVar = val;
    }

    void showPrivateVar() {
        privateMethod();
    }
};

int main() {
    MyClass obj;
    // obj.privateVar = 42;     // 错误:不能直接访问 private 成员
    // obj.privateMethod();     // 错误:不能直接调用 private 方法
    obj.setPrivateVar(42);       // 通过 public 方法间接访问 private 成员
    obj.showPrivateVar();        // 通过 public 方法间接调用 private 方法
    return 0;
}

protected 访问权限

protected 成员可以在类的内部和派生类中访问,但不能在类的外部访问。它们通常用于基类和派生类之间的共享实现细节。

示例代码:

#include <iostream>

class Base {
protected:
    int protectedVar;

    void protectedMethod() {
        std::cout << "Protected method called. ProtectedVar = " << protectedVar << std::endl;
    }
};

class Derived : public Base {
public:
    void accessProtectedMember() {
        protectedVar = 42;      // 可以在派生类中访问 protected 成员
        protectedMethod();      // 可以在派生类中调用 protected 方法
    }
};

int main() {
    Derived obj;
    // obj.protectedVar = 42;   // 错误:不能在类的外部访问 protected 成员
    // obj.protectedMethod();   // 错误:不能在类的外部调用 protected 方法
    obj.accessProtectedMember(); // 通过派生类的方法访问 protected 成员
    return 0;
}

访问控制总结
public:公共访问权限,任何地方都可以访问。
private:私有访问权限,只能在类的内部访问,外部无法直接访问。
protected:保护访问权限,可以在类的内部和派生类中访问,外部无法直接访问。
访问控制的应用
通过访问控制,可以有效地实现数据封装,隐藏内部实现细节,保护数据的完整性和安全性。同时,访问控制也支持面向对象编程中的继承和多态机制。以下是一个综合示例,展示了如何在实际应用中使用访问控制:

#include <iostream>
#include <string>

class Person {
private:
    std::string name;
    int age;

protected:
    std::string getName() const {
        return name;
    }

    int getAge() const {
        return age;
    }

public:
    Person(const std::string& n, int a) : name(n), age(a) {}

    void display() const {
        std::cout << "Name: " << name << ", Age: " << age << std::endl;
    }
};

class Student : public Person {
private:
    int studentID;

public:
    Student(const std::string& n, int a, int id) : Person(n, a), studentID(id) {}

    void showDetails() const {
        // 可以访问基类的 protected 成员函数
        std::cout << "Student Name: " << getName() << ", Age: " << getAge() << ", ID: " << studentID << std::endl;
    }
};

int main() {
    Person person("Alice", 30);
    person.display();

    Student student("Bob", 20, 12345);
    student.showDetails();

    return 0;
}

在这个示例中,Person 类的成员 name 和 age 是私有的,不能直接在类外部访问。Student 类继承了 Person 类,可以访问其受保护的成员函数 getName 和 getAge,从而实现数据的访问和显示。这展示了封装和访问控制的有效应用。

标签:访问控制,private,访问,protected,权限,public
From: https://www.cnblogs.com/mxh010211/p/18271373

相关文章

  • DispatcherServlet类关于protected HandlerAdapter getHandlerAdapter解释
    /** *ReturntheHandlerAdapterforthishandlerobject. *@paramhandlerthehandlerobjecttofindanadapterfor *@throwsServletExceptionifnoHandlerAdaptercanbefoundforthehandler.Thisisafatalerror. */ protectedHandlerAdapter......
  • QThread::run函数的使用(涉及到QThread::run, Qthread::start,protected,virtual虚函数,o
    RobotCommuServer.h#ifndefROBOTCOMMUSERVER_H#defineROBOTCOMMUSERVER_H#include<QThread>classRobotCommuServer:publicQThread{Q_OBJECTpublic:explicitRobotCommuServer(QObject*parent=nullptr);~RobotCommuServer();void......
  • MySQL Public Key Retrieval is not allowed 解决指南
    MySQLPublicKeyRetrievalisnotallowed解决指南基本概念与作用说明完整代码示例与解决方案示例一:检查用户权限示例二:检查KMS配置示例三:检查加密列定义示例四:重置密钥功能使用思路与最佳实践实际工作开发技巧在现代数据库管理中,加密和密钥管理是保障数据安全......
  • Public Round #13 题解
    旋转序列来源:IzbornePripreme2022(CroatianIOI/CEOITeamSelection)Day1,ProblemBhttps://qoj.ac/contest/956/problem/4326两个串之间\(1\)匹配的次数总和为\(k\timesl\),并且共有\(n\)次匹配。于是答案的上界为\(k\timesl\)个球放进\(n\)个盒子,最小化......
  • 如何为父类中私有(private)的属性赋值
    1.可以将父类中的私有属性写上调用接口将改父类转化为javabean子类继承这个改装后的父类通过调用getset接口来调用私有化的父类成员2.可以通过在子类中生成构造函数在构造函数内部使用super调用父类中的private成员,然后再测试类中new对象,通过getset方法赋值取值父类p......
  • 在Java中public class与class的区别(详细解释)
    在Java中,class 关键字用于定义一个类。当你使用 class关键字定义一个类时,它可以是公开的(即可以从其他包中访问)或包私有的(即只能在定义它的包内部访问)。在编写程序时,为了明确指定一个类为公开的,我们可以使用public 关键字来修饰 class。下面是publicclass 和 class(没有......
  • C++PrimerPlus:第十三章类和继承:访问控制:protected
    第十三章类和继承:访问控制:protected提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:访问控制:protected提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录第十三章类和继承:访问控制:protected前言一、访问控制:protected总结......
  • npm login 或者 npm adduser 之后 遇见 Public registration is not allowed
    npmlogin或者npmadduser之后遇见Publicregistrationisnotallowed其实是因为npm镜像地址有问题使用下方指令将镜像切回即可正确完成登录操作npmconfigsetregistryhttps://registry.npmjs.org/今天就总结到这里啦!后续会不定时更新哦,欢迎在评论区交流。如......
  • PKI(Public Key Infrastructure,公钥基础设施)常见标准介绍
    ASN.1-数据结构描述语言文件编码格式DER编码格式PEM编码格式证书、密码学Key格式标准X.509标准PKCS(公钥加密标准)系列(PKCS#1、PKCS#8、PKCS#12)常见的证书标准格式(PEM编码)X.509CertificateX.509CertificateSubjectPublicKeyInfoPKCS#1PrivateKeyPKCS#1......
  • public、private、protected、package、final
    public关键字用于将类、方法或变量声明为公共的,意味着它们可以被所有类访问。无限制,全局可见。private关键字用于将类、方法或变量声明为私有的,意味着它们只能在声明它们的类内部访问。仅限于同一类。java支持嵌套类,如果一个类内部还定义了嵌套类,那么,嵌套类拥有访问private的权......