首页 > 其他分享 >[Lang] 类成员修饰符

[Lang] 类成员修饰符

时间:2024-08-12 23:39:06浏览次数:12  
标签:Lang int 成员 修饰符 private protected 派生类 ParentClass public

[Lang] 类成员修饰符

1. 访问

  • public成员可以被任何代码访问,包括类的外部和派生类。
  • protected 成员不能被类的外部直接访问,但可以被该类的派生类访问。
  • private 成员只能在类内部访问,不能被类的外部或派生类直接访问。

2. 继承

  • public 继承:基类public,protected,private在派生类中分别变成:public, protected, private
  • protected 继承:基类public,protected,private在派生类中分别变成:protected, protected, private
  • private 继承:基类public,protected,private在派生类中分别变成:private, private, private

3. 示例

public继承:

#include<iostream>
using namespace std;

class ParentClass
{
public:
    int x;
protected:
    int y;
private:
    int z;
};

class ChildClass : public ParentClass // x-public, y-protected, z-private
{
public:
    void fun()
    {
        cout << "x = " << x << endl;  
        cout << "y = " << y << endl; 
        // cout << "z = " << z << endl; // error: 'z' is a private member of 'ParentClass'
    }
};

class GrandChildClass : public ChildClass // x-public, y-protected, z-private
{
public:
    void fun()
    {
        cout << "x = " << x << endl; 
        cout << "y = " << y << endl;
        // cout << "z = " << z << endl; // error: 'z' is a private member of 'ChildClass'
    }
};

int main()
{
    ChildClass obj;
    obj.x = 10;
    // obj.y = 20; // error: 'y' is a protected member of 'ChildClass'
    // obj.z = 30; // error: 'z' is a private member of 'ChildClass'
    return 0;
}

protected继承:

#include<iostream>
using namespace std;

class ParentClass
{
public:
    int x;
protected:
    int y;
private:
    int z;
};

class ChildClass : protected ParentClass // x-protected, y-protected, z-private
{
public:
    void fun()
    {
        cout << "x = " << x << endl;  
        cout << "y = " << y << endl; 
        // cout << "z = " << z << endl; // error: 'z' is a private member of 'ParentClass'
    }
};

class GrandChildClass : protected ChildClass // x-protected, y-protected, z-private
{
public:
    void fun()
    {
        cout << "x = " << x << endl; 
        cout << "y = " << y << endl;
        // cout << "z = " << z << endl; // error: 'z' is a private member of 'ChildClass'
    }
};

int main()
{
    ChildClass obj;
    // obj.x = 10; // error: 'x' is a protected member of 'ChildClass'
    // obj.y = 20; // error: 'y' is a protected member of 'ChildClass'
    // obj.z = 30; // error: 'z' is a private member of 'ChildClass'
    return 0;
}

private继承:

#include<iostream>
using namespace std;

class ParentClass
{
public:
    int x;
protected:
    int y;
private:
    int z;
};

class ChildClass : private ParentClass // x-private, y-private, z-private
{
public:
    void fun()
    {
        cout << "x = " << x << endl;  
        cout << "y = " << y << endl; 
        // cout << "z = " << z << endl; // error: 'z' is a private member of 'ParentClass'
    }
};

class GrandChildClass : private ChildClass // x-private, y-private, z-private
{
public:
    void fun()
    {
        // cout << "x = " << x << endl; // error: 'x' is a private member of 'ChildClass'
        // cout << "y = " << y << endl; // error: 'y' is a protected member of 'ParentClass'
        // cout << "z = " << z << endl; // error: 'z' is a private member of 'ChildClass'
    }
};

int main()
{
    ChildClass obj;
    // obj.x = 10; // error: 'x' is a private member of 'ChildClass'
    // obj.y = 20; // error: 'y' is a private member of 'ChildClass'
    // obj.z = 30; // error: 'z' is a private member of 'ChildClass'
    return 0;
}

标签:Lang,int,成员,修饰符,private,protected,派生类,ParentClass,public
From: https://www.cnblogs.com/yaoguyuan/p/18355932

相关文章

  • 使用 langchain 框架,构建一个简单的 LLM 应用程序
    介绍使用langchain框架,构建一个简单的LLM应用程序本文中出现的每段代码都是可以完整执行的注意大语言模型和各类框架迭代飞快,再看本文时,部分代码可能已经过时了本文所用到的python包版本dashscope1.20.3langchain0.2.12langchain-community0.2.11......
  • 【深海王国】初中生也能画的电路板?番外1:Arduino其他家族成员的拓展板开发(4)
    Hi~(o^^o)♪,各位深海王国的同志们,早上下午晚上凌晨好呀~辛苦工作的你今天也辛苦啦(/≧ω)今天大都督继续为大家带来电路板的番外系列——初中生也能画的电路板?番外1:Arduino其他家族成员的拓展板开发,带你给其他Arduino家族成员如ProMini、Mega2560等,进行拓展版DIY开发,l......
  • Golang中使用redis,mysql
    一、redis简介redis(REmoteDIctionaryServer)是一个由SalvatoreSanfilippo写key-value存储系统,它由C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value类型的数据库,并提供多种语言的API。和Memcached类似,它支持存储的value类型相对更多,包括string(......
  • 成员变量
    引言成员变量和局部变量在每种编程语言中都有涉及,如果之前了解过其他语言的成员变量或者局部变量,那么在学习java中的成员变量和局部变量时可以看看有那些联系和不同,这一块的东西也不能说难,如果第一次接触可能会感觉有点乱,所以接下来我先把java中总结的成员变量和局部变量的部分内......
  • LangChain 安全特性全解析与实践指南
    LangChain安全特性全解析与实践指南引言在人工智能的浪潮中,LangChain以其卓越的能力,成为开发大型语言模型(LLM)应用程序的佼佼者。然而,随着技术的发展,安全问题逐渐浮出水面。本文将深入探讨LangChain的安全特性,并提供详细的代码示例和最佳实践,以确保开发者能够在保障安全......
  • 新手常见错误:Language level is invalid or missing in pom.xml. Current project JDK
    目录Blue留声机:分析报错 Blue留声机:今天开一个maven的时候遇到这样一个报错,这个报错对于我来言是一个并不陌生的报错,早期学习spring框架的时候,遇到过这个问题,当时怎么也弄不出来(现在想想那个时候的我真菜),现在却对这种问题的解决游刃有余。好了,不多bb了,看看我一般处理bu......
  • c++的类和对象(中):默认成员函数与运算符重载(重难点!!)
    前言 Hello,小伙伴们,我们今天继续c++的学习,我们上期有介绍到c++的部分特性,以及一些区别于c语言的地方,今天我们将继续深入了解c++的类和对象,探索c++的奥秘。好,废话不多说,开始我们今天的学习。 1.类默认成员函数默认成员函数就是用户没有显示实现,编译器会自动生成的函数称......
  • Redis之golang编程实战
    Redis介绍官网:Redis-TheReal-timeDataPlatformRedis可作为数据库、缓存、流引擎和消息代理的开源内存数据存储。被用在不计其数的应用中。Redis连续5年被评为最受欢迎的数据库,是开发人员、架构师和开源贡献者参与社区的中心。Redis是一个开源(BSD许可)的内存数据......
  • 已解决:java.lang.UnsupportedClassVersionError 异常的正确解决方法,亲测有效!!!
    java.lang.UnsupportedClassVersionError是一个常见的错误,通常出现在运行一个Java程序时,提示某个类的版本与当前JVM(JavaVirtualMachine)不兼容。这通常意味着你试图在一个较低版本的JVM上运行由较高版本的Java编译器编译的类文件。本文将详细分析该错误的成因,并提供有效的解......
  • 009.Vue3入门,事件修饰符的使用方法
    1、代码如下:<template><h3>事件修饰符</h3><[email protected]="clickHandle"href="http://www.baidu.com">百度</a><div@click="click1"><p@click="click2">测试1</p></div>......