C++非继承时函数成员访问属性和类继承过程中的访问控制

yizhihongxing

C++中对类的访问控制主要有三种修饰符:public、private和protected。这三种修饰符决定了外部代码如何访问类的成员变量和成员函数。

非继承时函数成员访问属性

public访问修饰符

当一个函数成员被设置为public时,该函数可以被类的所有外部代码或函数访问。例如:

class MyClass {
public:
    void myPublicFunc();
};

void MyClass::myPublicFunc() {
    // code
}

在上面的例子中,myPublicFunc()函数被设置为public修饰符,因此该函数可以被MyClass的所有外部代码或函数访问。

private访问修饰符

当一个函数成员被设置为private时,该函数只能被MyClass内部访问。例如:

class MyClass {
private:
    void myPrivateFunc();
};

void MyClass::myPrivateFunc() {
    // code
}

在上面的例子中,myPrivateFunc()函数被设置为private修饰符,因此该函数只能被MyClass内部的函数和成员访问,不能被类的外部代码或函数访问。

protected访问修饰符

当一个函数成员被设置为protected时,该函数可以被MyClass内部访问和MyClass的子类访问。例如:

class MyClass {
protected:
    void myProtectedFunc();
};

void MyClass::myProtectedFunc() {
    // code
}

class MySubClass : public MyClass {
public:
    void myChildFunc();
};

void MySubClass::myChildFunc() {
    myProtectedFunc();
}

在上面的例子中,myProtectedFunc()函数被设置为protected修饰符,因此该函数可以被MyClass内部的函数和成员访问,同时也可以被继承MyClass的子类(如MySubClass)中的成员访问。

继承过程中的访问控制

访问控制同样适用于类的继承过程。一个类可以从另一个类继承成员变量和成员函数,同时继承来的成员变量和成员函数也会受到访问控制的约束。

public继承

当一个类以public的方式继承另一个类时,基类中的public成员在派生类中保持为public访问权限,private成员在派生类中仍然是私有的,不能被派生类访问(包括派生类中的成员函数)。

class MyBaseClass {
public:
    void myPublicFunc();
private:
    void myPrivateFunc();
};

void MyBaseClass::myPublicFunc() {
    // code
}

void MyBaseClass::myPrivateFunc() {
    // code
}

class MyDerivedClass : public MyBaseClass {
public:
    void myChildFunc();
};

void MyDerivedClass::myChildFunc() {
    myPublicFunc();
}

在上面的例子中,MyDerivedClass以public的方式继承自MyBaseClass。因此,myPublicFunc()函数在MyDerivedClass类中仍然是public的访问权限,可以被MyDerivedClass类的所有外部代码和函数访问。myPrivateFunc()函数在MyDerivedClass类中仍然是private的访问权限,不能被该类的任何外部代码和函数访问。

protected继承

当一个类以protected的方式继承另一个类时,基类中的public成员和protected成员在派生类中都称为protected成员,private成员在派生类中仍然是私有的,不能被派生类访问(包括派生类中的成员函数)。

class MyBaseClass {
public:
    void myPublicFunc();
protected:
    void myProtectedFunc();
private:
    void myPrivateFunc();
};

void MyBaseClass::myPublicFunc() {
    // code
}

void MyBaseClass::myProtectedFunc() {
    // code
}

void MyBaseClass::myPrivateFunc() {
    // code
}

class MyDerivedClass : protected MyBaseClass {
public:
    void myChildFunc();
};

void MyDerivedClass::myChildFunc() {
    myPublicFunc();
    myProtectedFunc();
    // myPrivateFunc();  // error: MyDerivedClass cannot access MyBaseClass::myPrivateFunc()
}

在上面的例子中,MyDerivedClass以protected的方式继承自MyBaseClass。因此,myPublicFunc()函数和myProtectedFunc()函数在MyDerivedClass类中都是protected访问权限,不能被该类以外的外部代码和函数访问。myPrivateFunc()函数在MyDerivedClass类中仍然是private的访问权限,不能被该类的任何外部代码和函数访问。

总结

C++中的访问控制是通过修饰符public、private和protected实现的。同时,访问控制同样适用于类的继承过程。学会理解和正确运用访问控制的知识,可以提高代码的可维护性和安全性。

以上就是C++非继承时函数成员访问属性和类继承过程中的访问控制的攻略。希望可以对读者有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++非继承时函数成员访问属性和类继承过程中的访问控制 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • mouseover和mousemove

    使用 JavaScript 中的 mouseover 和 mousemove 事件 当我们开发网站时,有时需要让页面元素与用户的鼠标动作产生交互。JavaScript 提供了两个事件来监视鼠标的运动:mouseover(鼠标移入)和 mousemove(鼠标移动)。 mouseover 事件 mouseover 事件在用户将鼠标光标移动到页面上的某个元素时触…

    其他 2023年3月28日
    00
  • Python 面向对象部分知识点小结

    Python 面向对象部分知识点小结 1. 类和对象 在Python中,一切皆为对象,对象是类的实例化。类是一种自定义的数据类型,它定义了对象的属性和方法。 1.1 类的定义和实例化 使用class关键字定义一个类,类名通常采用驼峰命名法。通过类名后加括号的方式可以实例化一个对象。 示例代码: class Person: def __init__(self,…

    other 2023年8月8日
    00
  • Win10创意者更新15063.483更新补丁KB4025342下载地址 X86/X64

    Win10创意者更新15063.483更新补丁KB4025342下载地址 X86/X64攻略 简介 Win10创意者更新15063.483更新补丁KB4025342是为Windows 10创意者更新版本(版本号15063.483)发布的一个重要补丁。该补丁修复了一些安全漏洞和系统稳定性问题,建议用户及时安装以保证系统的安全和稳定性。 下载地址 你可以从以下链…

    other 2023年8月3日
    00
  • win10怎么显示文件隐藏的扩展名?

    当你在Windows 10中打开文件资源管理器时,默认情况下,文件的扩展名是隐藏的。然而,你可以通过以下步骤来显示文件的隐藏扩展名: 打开文件资源管理器:你可以通过按下Win键和E键来快速打开文件资源管理器,或者在任务栏上点击文件夹图标。 在文件资源管理器中,点击顶部菜单栏的“查看”选项卡。 在“查看”选项卡中,你会看到一个名为“文件名扩展名”的复选框。点击…

    other 2023年8月5日
    00
  • MySQL字符编码设置方法

    MySQL字符编码设置方法 字符编码(Character Encoding)在数据库中是一个非常重要的配置项。它负责将实际存储在数据库中的二进制数据(如字符串)转换为可读的文本形式,并且也能决定如何存储和比较文本。 MySQL支持多种字符编码,包括Unicode、ASCII、UTF8等。正确设置MySQL字符编码是确保数据在数据库中正确存储和显示的关键。在下…

    other 2023年6月25日
    00
  • iOS实现实时检测网络状态的示例代码

    下面就为大家详细讲解如何实现iOS实时检测网络状态的示例代码。 一、概述 在移动应用开发中,检测网络状态时非常必要的一项功能。iOS提供了一个Reachability类用于判断当前网络状态,本文将介绍如何使用Reachability类实现实时检测网络状态的功能,并提供两个使用示例。 二、实现步骤 1.导入Reachability框架 在项目中导入Reacha…

    other 2023年6月26日
    00
  • 详解C语言的exp()函数和ldexp()函数以及frexp()函数

    详解C语言的exp()函数和ldexp()函数以及frexp()函数 1. exp()函数 1.1 函数简介 exp()函数是C语言中一个计算指数函数的函数,可以计算以自然对数为底的指数函数。 1.2 函数原型 double exp(double x); 1.3 函数参数 exp()函数的参数x为一个double类型的数值,表示指数。 1.4 函数返回值 e…

    other 2023年6月26日
    00
  • asp.net下一个账号不允许多个用户同时在线,重复登陆的代码

    要实现ASP.NET下一个账号不允许多个用户同时在线、重复登录的功能,可以通过Session和Application实现。具体实现步骤如下: 在登录页面,获取用户名和密码,进行验证。如果验证通过,将用户名保存到Session中,并在Application对象中记录该用户名是否已登录。代码示例如下: protected void btnLogin_Click(…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部