C++初阶——权限与继承

 

目录

一、C++权限方面的问题

1.访问权限

2.继承机制

二、C++const引用

const引用有以下几个特点

临时对象引用

常量引用成员变量

 二、c++引用空间相关问题

三.auto


 

一、C++权限方面的问题

【C++入门】访问权限管控和继承机制详解_权限继承功能-CSDN博客文章浏览阅读840次。(2)但是在派生类还是可以调用基类的同名成员的,可以使用指定域名的方法:父类::成员;显示的指定要调用父类的成员而不是派生类的成员;_权限继承功能https://blog.csdn.net/weixin_42031299/article/details/127342114

C++ 中的访问权限(Access Specifiers)管控和继承机制是面向对象编程的重要概念之一。通过访问权限和继承,可以控制类成员的可见性和访问级别。

1.访问权限

  1. C++ 提供了三种访问权限:公有(public)、私有(private)和保护(protected)。它们用于限制类成员的可见性和访问级别。

  2. 默认情况下,类的成员是私有的。我们可以使用访问权限来控制哪些成员对外部可见,哪些成员对外部隐藏。

    例如:

    • 公有(public):公有成员在类的内部和外部都是可见的,可以被任何代码访问。
    • 私有(private):私有成员只能在类的内部访问,外部无法直接访问私有成员。
    • 保护(protected):保护成员在类的内部和子类中可见,但在外部不可直接访问。
  • class MyClass {
    public:int publicVar;    // 公有成员变量void publicFunc();    // 公有成员函数private:int privateVar;   // 私有成员变量void privateFunc();   // 私有成员函数protected:int protectedVar;   // 保护成员变量void protectedFunc();   // 保护成员函数
    };
    

2.继承机制

  • C++ 中的继承机制允许一个类(称为派生类或子类)从另一个类(称为基类或父类)继承属性和行为。

    继承可以通过关键字 classstruct 来定义。

    例如:

    • 公有继承(public inheritance):派生类继承了基类的公有成员和保护成员,但私有成员不可直接访问。
    • 私有继承(private inheritance):派生类继承了基类的公有成员和保护成员,但都变为私有成员。
    • 保护继承(protected inheritance):派生类继承了基类的公有成员和保护成员,但都变为保护成员。
  1. // 基类
    class BaseClass {
    public:int publicVar;void publicFunc();private:int privateVar;void privateFunc();protected:int protectedVar;void protectedFunc();
    };// 公有继承
    class DerivedClass : public BaseClass {// DerivedClass 可以访问 BaseClass 的公有成员和保护成员
    };// 私有继承
    class DerivedClass : private BaseClass {// DerivedClass 可以访问 BaseClass 的公有成员和保护成员,但都变为私有成员
    };// 保护继承
    class DerivedClass : protected BaseClass {// DerivedClass 可以访问 BaseClass 的公有成员和保护成员,但都变为保护成员
    };
    

    通过继承,派生类可以获得基类的属性和行为,并且可以在派生类中添加新的成员或修改继承的成员。

二、C++const引用

在C++中,const引用是指对常量进行引用的一种方式。通过使用const修饰符来声明引用,可以确保被引用对象在引用期间不会被修改。

const引用有以下几个特点

对常量引用:const引用主要用于传递常量参数给函数,防止函数内部对参数进行修改。例如:

void printValue(const int& value) {// value是一个const引用,不能在函数内部修改它cout << "Value: " << value << endl;
}

临时对象引用

const引用还可以绑定到临时对象(即右值)上。这种用法可以避免在使用临时对象时进行不必要的拷贝构造。例如:

const int& result = getSum(3, 4);

常量引用成员变量

在类中,可以使用const引用作为成员变量的类型,以确保该成员变量在对象的整个生命周期内都不能被修改。例如:

class MyClass {
private:const int& constantRef;
public:MyClass(const int& value) : constantRef(value) {}
};

需要注意的是,const引用只能绑定到具有相同或更长生命周期的对象上,而不能绑定到临时对象的非const引用或非const指针上。

 二、c++引用空间相关问题

在 C++ 中,引用不开辟空间。引用不是一个对象,它只是已存在的变量或对象的别名。引用本身不占用内存,它只是一个已存在对象的别名或昵称。引用变量在内存中只是原变量的另一个名称,所以对引用变量的任何操作都会影响到原变量。

因为引用只是一个别名,所以我们在创建引用时必须将其初始化成一个已经存在的对象,否则会导致编译错误。同时,在使用引用时也要注意,如果被引用的对象被销毁或释放了,那么该引用就会成为悬空引用(dangling reference),访问它会引发未定义行为的错误。因此,我们应该始终确保引用指向的对象在引用生命周期内都是有效的。

需要注意的是,引用和指针虽然有相似之处,但二者之间存在一些重要的区别。指针是一个实际的对象,它存储了一个地址值,指向一个具体的内存位置,而引用只是一个别名,没有实际的对象来支持它。因此,我们可以对指针进行运算、赋值等操作,而对于引用则不能进行这些操作。

总之,在 C++ 中,引用不开辟空间,它只是一个已存在对象的别名或昵称,对引用进行的任何操作都会直接影响到原变量。

 

当我们创建一个引用时,它必须初始化为一个已经存在的对象或变量。下面是一些关于引用的示例:

int main() {int num = 10;// 创建一个整型引用,并将其初始化为numint& ref = num;// 修改引用的值会直接修改原变量的值ref = 20;std::cout << "num: " << num << std::endl;  // 输出:num: 20// 创建一个常量引用,它不能修改被引用的对象的值const int& constRef = num;// constRef = 30;  // 错误,不能修改常量引用// 引用作为函数参数,可以方便地传递和修改变量的值void increment(int& value) {value++;}int value = 5;increment(value);std::cout << "value after increment: " << value << std::endl;  // 输出:value after increment: 6return 0;
}

在上面的示例中,我们创建了一个整型变量 num 和一个与之关联的引用 ref。通过修改 ref 的值,我们实际上修改了 num 的值。

另外,我们还创建了一个常量引用 constRef,它不能修改被引用的对象的值。

最后,我们定义了一个函数 increment,它以引用作为参数。这使得我们可以直接修改传递给函数的变量的值,而无需使用指针或返回值。

这些示例展示了引用在C++中的使用方式,它们提供了一种方便而灵活的方式来操作和传递变量。

 

三.auto

在 C++11 标准中,引入了 auto 关键字,用于自动推导变量的类型。auto 关键字可以使代码更简洁、可读性更高,并且可以轻松地处理复杂的类型声明。

auto 关键字的使用方法如下:

auto 变量名 = 表达式;

在这里,变量名是我们要定义的变量的名称,表达式是一个用于初始化变量的表达式。auto 关键字会根据表达式的类型来推断变量的类型,从而省略了我们手动指定类型的步骤。

例如,我们可以使用 auto 来推导一个整数类型的变量:

auto i = 42;  // 推导为 int 类型

我们还可以使用 auto 来推导一个 std::vector<int> 类型的变量:

std::vector<int> v = {1, 2, 3};
auto vec = v;  // 推导为 std::vector<int> 类型

auto 关键字的好处在于,我们不必手动指定变量类型,这样可以简化代码并提高可读性。此外,auto 还可以处理一些比较复杂的类型声明,例如函数指针和 lambda 表达式等。这些类型声明通常会很冗长,使用 auto 可以避免这种情况。

需要注意的是,auto 关键字不能用于函数参数、类成员变量、非静态局部变量等场景。此外,在使用 auto 推导变量类型时,要注意表达式的类型,以避免类型推导错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/313425.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 跨进程之间通信(IPC)方式之ContentProvider

Android 跨进程之间通信 Android 跨进程之间通信(IPC)方式之BroadcastReceiverAndroid 跨进程之间通信(IPC)方式之ContentProvider 文章目录 Android 跨进程之间通信前言一、ContentProvider 是什么&#xff1f;二、如何利用ContentProvider跨进程通信1.创建自定义ContentProv…

在宝塔Linux中安装Docker

前言 帮助使用宝塔的用户快速上手docke的安装 &#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Docker》。&#x1f3af;&#x1f3af…

简单Diff算法

简单Diff算法 渲染器的核心 Diff算法 解决的问题 比较新旧虚拟节点的子节点&#xff0c;实现最小化更新。 虚拟节点key属性的作用 就像虚拟节点的“身份证号”&#xff0c;在更新时&#xff0c;渲染器会通过key属性找到可复用的节点&#xff0c;然后尽可能地通过DOM移动操…

软件测试/测试开发丨Linux 数据处理三剑客学习笔记

一、Linux 三剑客之 grep 1、 内容检索 获取行&#xff08;单行&#xff09; grep pattern file获取内容 grep -o pattern file获取上下文 grep -A -B -C pattern file 2、 文件检索 递归搜索 grep pattern -r dir/展示匹配文件名 grep -H 111 /tmp/1只展示匹配文件名 grep …

[情商-3]:理解男女思维方式、心理诉求、情绪诉求的差别

目录 前言&#xff1a; 一、感性思维 VS 理性思维 1.1 感性思维 VS 理性思维 1.2 情绪 VS 事情本身 1.3 情绪感知 VS 逻辑推理 二、情绪的表达 2.1 表达方式 2.2 表达途径 三、不明说的情绪和倾诉诉求&#xff1a;隐藏在情绪表达方式之下的情绪与情绪诉求 3.0 快乐愉…

常见网络设备及功能详解

网络设备 - 交换机 交换机&#xff1a;距离终端用户最近的设备&#xff0c;用于终端用户接入网络、对数据帧进行交换等。 交换机的功能&#xff1a; 终端设备&#xff08;PC、服务器等&#xff09;的网络接入二层交换&#xff08;Layer 2 Switching&#xff09; 网络设备 - …

思维链COT原理探究

要进行因果分析&#xff0c;需要把思维链中的不同元素拆解开来&#xff0c;然后通过控制变量实验&#xff0c;来研究不同元素对COT效果的影响。以下两篇论文的核心差异就在于: COT的变量拆解&#xff0c;以及控制变量的实验方式。 结合两篇论文的实验结论&#xff0c;可能导致…

如何在Linux系统中安装Redis

原本Redis官网提供了Windows和Linux两个版本&#xff0c;但从 2011-12-29 以后不再更新Windows版本&#xff08;https://github.com/dmajkic/redis/downloads&#xff09;&#xff0c;加之企业生产环境通常使用Linux系统&#xff0c;所以这里在Linux系统中演示如何安装Redis。 …

十八、任务通知

1、前言 (1)所谓“任务通知”&#xff0c;可以反过来读"通知任务"。我们使用队列、信号量、事件组等等方法时&#xff0c;并不知道对方是谁。使用任务通知时&#xff0c;可以明确指定&#xff1a;通知哪个任务。 (2)使用队列、信号量、事件组时&#xff0c;我们都需…

Pycharm引用其他文件夹的py

Pycharm引用其他文件夹的py 方式1&#xff1a;包名设置为Sources ROOT 起包名的时候&#xff0c;需要在该文件夹上&#xff1a;右键 --> Mark Directory as --> Sources ROOT 标记目录为源码目录&#xff0c;就可以了。 再引用就可以了 import common from aoeweb impo…

Select工作原理

I/O多路复用是一种并发处理的机制&#xff0c;允许一个进程通过一种机制监视多个描述符&#xff0c;从而在有多个I/O操作需要处理时选择其中之一进行服务。select 函数是一种常见的实现 I/O 多路复用的系统调用&#xff0c;它允许一个进程同时监视多个文件描述符的可读性、可写…

医院安全(不良)事件报告系统源码 支持二次开发、支持源码交付

医疗不良事件报告系统源码旨在建立全面的、统一的医疗不良事件标准分类系统和患者安全术语&#xff0c;使不良事件上报管理更加标准化和科学化。通过借鉴国内外医疗不良事件报告系统的先进经验&#xff0c;根据医疗不良事件的事件类型、处理事件的不同部门&#xff0c;灵活设置…