如何在C++类外部访问私有/保护方法

如何在C++类外部访问私有/保护方法

私有: 声明为 private的类成员仅可以由类内的函数访问。它们不允许直接被任何对象或函数在类外部访问。只有成员函数或友元函数才可以访问类的私有数据成员。

我们可以使用虚函数在其他类中访问私有方法,虚函数是在基类中声明并由派生类重新定义(覆盖)的成员函数。使用指向基类的指针或引用引用派生类对象,可以为该对象调用虚函数并执行派生类的版本。

程序1: 演示私有访问修饰符

// C ++程序演示私有
//访问修饰符
#include 
using namespace std;

//父类具有虚拟
//函数分散()
class Parent {
public:
    //创建虚拟函数
    virtual void disp()
    {
        cout << "这是公共的disp"
             << "父类的方法" << endl;
    }
};

// Child类继承到父类
class Child: public Parent {
private:
    int secret_key;

    //将调用的私有方法
    //覆盖父类的方法
    void disp()
    {
        cout << "这是私有disp"
             << "孩子类"
             << endl;
        cout <<“密钥是”
             << secret_key << endl;
    }

public:
    // child类的构造函数
    Child(int key){secret_key = key; }
};

//驱动程序
int main()
{
    //创建child类对象
    Child child(1019);

    //向上转型
    Parent * obj =&child

    //调用child类函数
    obj->disp();
    return 0;
}  

输出:

这是私有的disp方法 child class 
密钥是1019

解释:

在上面的程序中,父类有一个函数 void disp() 是一个 虚拟 函数。Child类已经创建了另一个名称相同的函数,即void disp()但该函数是私有的,这意味着不能直接通过类外的任何对象或函数来访问它。在main()中,首先创建child类的对象并传递参数以初始化 secret_key 变量,之后,我们将child类对象的地址存储在基类指针中,这也称为 向上转型 。现在,基类指针保存了child类对象的地址,但是当使用基类指针调用函数时,它只会调用基类函数。但是如果想要调用child类函数以使基类函数 虚拟 。这也称为 运行时多态性。

保护: protected访问修饰符与私有访问修饰符类似,其区别在于被声明为Protected的类成员在类外部是不可访问的,但它们可以被任何该类的子类(派生类)访问。

程序2: 演示保护访问修饰符

// C++程序演示了protected访问修饰符
// 包括
#include <iostream>
using namespace std;
 
// 父类拥有虚函数disp()
class Parent {
public:
    // 创建虚函数
    virtual void disp()
    {
        cout << "这是父类的公共disp"
             << " Parent class"
             << endl;
    }
};
 
// 子类继承父类
class Child : public Parent {
protected:
    int secret_key;
 
    // 被调用的私有方法
    // 覆盖父类的方法
    void disp()
    {
        cout << "这是子类的protected  disp方法"
             << " The method of child class "
             << endl;
        cout << "密钥是 "
             << secret_key << endl;
    }
 
public:
    // 子类构造函数
    Child(int key) { secret_key = key; }
};
 
// 主要代码
int main()
{
    // 创建子类对象
    Child child(1019);
 
    // 向上转型
    Parent* obj = &child
 
    // 子类函数调用
    obj->disp();
    return 0;
}  

输出:

这是子类的protected  disp方法
密钥是1019

说明 :

在上面的例子中,父类有函数 void disp() 是一个 虚函数 。子类创建了另一个同名函数即void disp(),但该函数是私有函数,这意味着它不能直接被类外的任何对象或函数访问。在main()中,我们首先创建了子类的对象并传递一个参数来初始化子类中的secret_key变量,然后我们将子类对象的地址存储在基类指针中,这也被称为 向上转型(upcasting) 。现在基类指针持有子类对象的地址,但在使用基类指针调用函数时,它只会调用基类函数。但是,如果想调用子类函数,将基类函数 虚函数 。这也被称为 运行时多态(runtime polymorphism) 。 **

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程