首页 > 编程语言 >C++详细笔记(五)

C++详细笔记(五)

时间:2024-11-01 23:17:18浏览次数:6  
标签:友元 初始化 const 函数 成员 笔记 访问 C++ 详细

1.类和对象

1.1运算符重载(补)

1.运算符重载中,参数顺序和操作数顺序是一致的。

2.一般成员函数重载为成员函数,输入流和输出流重载为全局函数。

3.由1和2只正常的成员函数默认第一个参数为this指针而重载中参数顺序和操作数顺序要一致,则导致使用时为d<<cout;(不符合使用习惯正常为:cout<<d<<endl).

void Date::operator<<(ostream& out)
{
	return out << _year << "年" << _month << "月" << _day << "日" << endl;
}
//全局声明
ostream& operator(ostream& out ,const Date d);
istream& operator(istream& in, Date d);

1.2友元函数

        在 C++ 中,友元函数是一种特殊的函数。它可以访问类的私有成员和保护成员,尽管它不是该类的成员函数。

一、友元函数的作用

友元函数的主要作用是在不破坏类的封装性的前提下,允许特定的函数访问类的私有成员。这在某些情况下非常有用,例如:

  1. 提高程序的效率:如果某些操作需要频繁访问类的私有成员,使用友元函数可以避免通过成员函数的接口进行访问,从而提高程序的执行效率。
  2. 实现特定的功能:在某些情况下,需要在类的外部实现一些与类相关的功能,而这些功能需要访问类的私有成员。友元函数可以提供一种方便的方式来实现这些功能。

二、友元函数的声明和定义

1.声明友元函数:在类的内部,可以使用 friend 关键字声明友元函数

class MyClass {
private:
    int privateData;
public:
    MyClass(int data) : privateData(data) {}
    friend void friendFunction(MyClass& obj);
};

2.定义友元函数:友元函数的定义可以在类的外部进行,就像普通函数一样。

void friendFunction(MyClass& obj) {
    std::cout << "Private data: " << obj.privateData << std::endl;
}
friend ostream& operator(ostream& out, const Date d);
friend istream& operator(istream& in, Date d);
//Date类中private私有化导致类外不能访问这时候可以使用友元函数来进行访问。

三、友元函数的注意事项

  1. 友元关系是单向的:如果函数 A 是类 B 的友元函数,那么函数 A 可以访问类 B 的私有成员,但类 B 不能访问函数 A 的私有成员。
  2. 友元关系不能传递:如果函数 A 是类 B 的友元函数,函数 B 是类 C 的友元函数,那么函数 A 不能直接访问类 C 的私有成员。
  3. 友元函数可能破坏类的封装性:使用友元函数时,需要谨慎考虑,确保不会破坏类的封装性。如果过多地使用友元函数,可能会导致类的内部实现细节暴露给外部,从而降低程序的可维护性和可扩展性。

1.3const成员函数

一、const 成员函数的作用

  1. 保证对象的状态不被修改:通过使用 const 成员函数,可以向编译器保证该函数不会修改对象的状态。这对于那些只需要读取对象数据而不需要修改对象的操作非常有用。
  2. 允许 const 对象调用成员函数:如果一个对象被声明为 const,那么只能调用该对象的 const 成员函数。这是因为非 const 成员函数可能会修改对象的状态,而 const 对象不允许被修改。

二、const 成员函数的声明和定义

1.声明 const 成员函数:在成员函数的声明后面加上 const 关键字,表示该函数是 const 成员函数。

void Date::Print()const
{
	cout << _year << "_" << _month << "_" << _day << endl;
}
//不是成员函数都可以const

1.4初始化列表

        在 C++ 中,初始化列表是一种用于初始化类成员变量的语法结构。它通常在构造函数的参数列表之后,函数体之前使用。

一、初始化列表的作用

  1. 更高效的初始化:对于一些没有默认构造函数的成员变量或者需要特定参数进行初始化的成员变量,使用初始化列表可以直接调用其合适的构造函数进行初始化,避免了先使用默认构造函数初始化再赋值的过程,从而提高了程序的效率。
  2. 常量成员变量的初始化:对于常量成员变量,只能通过初始化列表进行初始化,因为常量在初始化后不能被修改。
  3. 引用成员变量的初始化:引用成员变量也必须在初始化列表中进行初始化,因为引用在声明时必须被初始化。
class ClassName 
{
    MuQueue(int n = 20):_pushst(n),_popst(n),_size(0),_x=1;
};

private:
stack _Pushst;
stack _Popst;
int _size;
const int _x;

//成员变量的初始化顺序是声明的次序和初始化中的无关。
//实践中最好使用初始化列表。

标签:友元,初始化,const,函数,成员,笔记,访问,C++,详细
From: https://blog.csdn.net/learn_c_and/article/details/143441902

相关文章

  • ctf web赛道基础 万字笔记
    《Java代码审计》http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484219&idx=1&sn=73564e316a4c9794019f15dd6b3ba9f6&chksm=c0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene=21#wechat_redirect《Web安全》http......
  • JavaScript中变量的基础知识(超详细)
    1.变量1.1目标理解变量是计算机存储数据的容器变量:变量是计算机用来存储数据的容器(盒子)作用:记录计算机数据的不同状态注意:变量不是数据本身,它们仅仅是一个用于存储数值的容器。可以理解为一个用来装东西的纸箱子1.2变量的基本使用变量的声明(创建变量)letage//let变量......
  • UEFI 笔记 001 —— 什么是 ACPI method
    声明:个人笔记,概不负责所谓ACPImethod本质上就是Callback是在OS主导下,OS发起的,对SystemFirmware的调用。类似在Windows上用C编写Win32应用,需要实现一堆OS要求的Callback函数。ACPImethod的提供者,事实上在实现OS要求的Callback所不同的是,OS调用C应......
  • 4-10分钟搭建个免费的博客(个人笔记),初识wordpress
    最近几年博客的开源项目wordpress火得不行,今天借着使用宝塔的机会,快速试了一下,发现其功能确实比较全面,使用起来学习成本也非常低。把这个过程记录下来,让一个绝对的新手,按着操作,也可以搭建起来。同时也截图一下wordpress的后台,让大家通过本篇文章,对wp也有个直观的认识。为了加速......
  • Mysql学习笔记4--用户权限
    Mysql学习笔记4--用户权限新建用户root登陆ssh登陆服务器,然后以root账户登陆Mysql。sudomysql-uroot-p创建新用户CREATEUSER'John_Lennon'@'%'IDENTIFIEDBY'Beatles!666';创建一个新用户John_Lennon,密码为Beatles!666。其中@后面的%代表可以从任意IP登陆此账......
  • 2024网鼎杯线上赛REVERSE02(超详细)
    进入主函数分析代码发现了四段加密,一层一层进行解密第一步:打开进入main函数,然后分析代码第一个加密对dest的八个字节做了乘2加密,密文是s2伪代码下看不全在汇编下看第二步:第二块数据进行了异或加密异或key是XorrLord,然后写脚本进行解密拿到了第一段和第二......
  • CodeForces Dora and C++ (2007C) 题解
    CodeForcesDoraandC++(2007C)题解题意给一个数组\(c_{1...n}\),定义数组的\(range\)是最大值减最小值,即极差。给出两个值\(a\)和\(b\),每步操作中,可给数组中任一一个数增大\(a\)或增大\(b\)。问任意步操作后(可以是\(0\)步),极差的最小值。思路(要直接看答案可以跳......
  • 07C++选择结构(1)——教学
    一、基础知识1、关系运算符因为我们要对条件进行判断,必然会用到关系运算符:名称大于大于等于小于小于等于等于不等于符号>>=<<===!=关系表达式的值是一个逻辑值,即“真”(True)或“假”(False)。如果条件成立,其值为“真”;如果条件不成立,其值为“假”。2、逻......
  • 深信服学习笔记-Day0.5
    01信息收集之DNS信息查询综合实验whois查询站长之家查询利用nslookup工具进行域名查询(windows中的命令提示符中进行操作,kali终端中使用dig进行查询使用DNS子域名爆破工具,针对子域名进行爆破,同时解析出对应的IP地址。在github上查找subDomainsBrute工具。--在03子域名收集......