C++基础---友元

2024-09-05 06:58
文章标签 基础 c++ 友元

本文主要是介绍C++基础---友元,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

友元概念


友元函数

定义:
friend<数据类型><友元函数名>(参数列表)
#include<iostream>
using namespace std;//定义友元函数
class Rectangle
{
private:double length;double  width;
public:Rectangle(double l,double w):length(l),width(w){}friend double area(Rectangle &Rec); //定义友元
};
//友元实现
double area(Rectangle &Rec)
{return Rec.length*Rec.width;
}
int main()
{Rectangle Rect(12.0,2.1);cout<<"The area is "<<area(Rect);return 0;
}

友元成员


#include<iostream>
#include<string.h>using namespace std;class Boy;  //提起声明class Girl
{
private:char *name;int age;
public:Girl(char *n,int num);void display(Boy &boy);~Girl();
};Girl::Girl(char *n,int num){name = new char[strlen(n)+1];strcpy(name ,n);age = num;}Girl::~Girl(){delete name;}class Boy
{
private:char* name;int age;
public:Boy(char *n,int a);friend void Girl::display(Boy &b);  //声明友元函数~Boy();
};Boy::Boy(char *n,int num){name = new char[strlen(n)+1];strcpy(name ,n);age = num;}Boy:: ~Boy(){delete name;}
void Girl::display(Boy &b)
{cout<<"Girl\'s name: "<<name <<"  age :"<<age<<endl;cout<<"Boy\'s name: "<<b.name <<"  age :"<<b.age<<endl;
}int main()
{Girl g("helinqian",28);Boy  b("yuanqianqian",27);g.display(b);return 0;
}
友元类

友元类一般形式:
friend class<友元类名>
using namespace std;class Boy;  //提起声明class Girl
{
private:char *name;int age;
public:Girl(char *n,int num);void display(Boy &boy);~Girl();
};Girl::Girl(char *n,int num){name = new char[strlen(n)+1];strcpy(name ,n);age = num;}Girl::~Girl(){delete name;}class Boy
{
private:char* name;int age;
public:Boy(char *n,int a);friend class Girl;  //声明类girl是类boy的友元函数~Boy();
};Boy::Boy(char *n,int num){name = new char[strlen(n)+1];strcpy(name ,n);age = num;}Boy:: ~Boy(){delete name;}
void Girl::display(Boy &b)
{cout<<"Girl\'s name: "<<name <<"  age :"<<age<<endl;cout<<"Boy\'s name: "<<b.name <<"  age :"<<b.age<<endl;
}int main()
{Girl g("helinqian",28);Boy  b("yuanqianqian",27);g.display(b);return 0;
}

注意事项:
友元关系不能被继承。
友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明
友元可以访问类的私有成员。
只能出现在类定义内部,友元声明可以在类中的任何地方,一般放在类定义的开始或结尾。
友元可以是普通的非成员函数,或前面定义的其他类的成员函数,或整个类。
类必须将重载函数集中每一个希望设为友元的函数都声明为友元。
友元关系不能继承,基类的友元对派生类的成员没有特殊的访问权限。如果基类被授予友元关系,则只有基类具有特殊的访问权限。该基类的派生类不能访问授予友元关系的类。


这篇关于C++基础---友元的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138261

相关文章

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

C++变换迭代器使用方法小结

《C++变换迭代器使用方法小结》本文主要介绍了C++变换迭代器使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、源码2、代码解析代码解析:transform_iterator1. transform_iterat

详解C++中类的大小决定因数

《详解C++中类的大小决定因数》类的大小受多个因素影响,主要包括成员变量、对齐方式、继承关系、虚函数表等,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 非静态数据成员示例:2. 数据对齐(Padding)示例:3. 虚函数(vtable 指针)示例:4. 继承普通继承虚继承5.

C++中std::distance使用方法示例

《C++中std::distance使用方法示例》std::distance是C++标准库中的一个函数,用于计算两个迭代器之间的距离,本文主要介绍了C++中std::distance使用方法示例,具... 目录语法使用方式解释示例输出:其他说明:总结std::distance&n编程bsp;是 C++ 标准

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示