C++之:友元类

一、文章来由

上一篇写了友元函数,这一次写一个姊妹篇,继续深入探究一下友元类。

二、定义

友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。

当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类。定义友元类的语句格式如下:

friend class 类名;

其中:friend和class是关键字,类名必须是程序中的一个已定义过的类。

三、例子

#include <iostream>
using namespace std;

class Radius
{
    friend class Circle;   //声明Circle为Radius的友元类
    friend void Show_r(Radius &n);     //声明Show_r为友元函数

public:
Radius(int x)
{
    r = x;
}
~Radius()
{
}

private:
    int r;
};

void Show_r(Radius &n)
{
    cout<<"圆的半径为: "<<n.r<<endl;    //调用Radius对象的私有成员变量r
}

class Circle
{
public:
    Circle(){}
    ~Circle(){}

double area(Radius a)
{
    s = a.r * a.r * 3.1415926;             //调用Radius对象的私有成员变量r
    return s;
}

private:
    double s;
};

int main(int argc, char *argv[])
{
    Radius objRadius(9);
    Circle objCircle;

    Show_r( objRadius );
    cout<<"面积为:"<<objCircle.area(objRadius)<<endl;

    return 0;
}
时间: 2024-08-04 09:41:32

C++之:友元类的相关文章

C++学习摘要之六:友元函数与友元类

采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为 公有的,依此提供类与外界间的通信接口.但是,有时需要定义一些函数,这些函数不是类的一部分,但 又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数.除了友元函数外,还有 友元类,两者统称为友元.友元的作用是提供了工序的运行效率,但又破坏了类的封装性. 1.友元函数 友元函数是可以直接访问类的私有成员的非成员函数.它是定义在类外的普通函数,它不属于任何类 ,但需要在类的定义中加以声明,声明时

解决友元类(friend class)无法继承的问题

解决友元类(friend class)无法继承的问题   友元声明friend class是无法继承的.举例说明:class A声明class B为其友元类,也就是说class A授予class B访问class A的所有包括私有成员在内的所有成员.如果class C 继承class B.那么class C是不具备这种特权的.     但是如果我想在class C中访问class A的某个私有或者保护成员函数怎么办? 我们可以把工作交给父类.   #include <iostream> usi

c++ 友元类的参数问题

问题描述 c++ 友元类的参数问题 #include#includeusing namespace std; class Point{public: Point (int x=0int y=0):x(x)y(y){cout<<""构造函数被调用""<<endl;} Point (Point &p){cout<<""复制构造函数被调用""<<endl;x=p.x;y=p.y

C++友元类实现

C++中的友元既可以实现友元函数,也可以实现友元类,也就是说一个类也可以作为另外一个类的友元.当作为一个类的友元时,它的所有成员函数都是另一个类的友元函数,都可以访问另一个类的私有或者公有成员. 请看实例: #include <iostream> #include <cstring> using namespace std ; //声明教师类 class Techer ; //学生类 class Student { private: string name ; int age ;

求c++大神,友元类,代码如下

问题描述 求c++大神,友元类,代码如下 #include#include#includeusing namespace std; class interviewee{public: friend class interviewer; interviewee(string ming1int age1string job1) { ming=ming1;age=age1;job=job1; } interviewee(){} friend showinfo(interviewee a) { cout

【C/C++学院】0819-/类的成员函数与const-mutable /构造与析构/拷贝构造deletedefault以及深浅拷贝/静态成员函数成员变量类在内存的存储默认参数/友元类以及友元函数

类的成员函数与const-mutable  成员函数 Fushu.h #pragma once #include <iostream> class fushu { public: int x; int y; public: fushu(); ~fushu(); void show(); inline void showall(int x, int y);//显式内联 void setxy(int x, int y);//编译器优化,默认隐式内联 void show(int x, int y);

uml-C++UML图怎么表示一个类是另外一个类的友元类

问题描述 C++UML图怎么表示一个类是另外一个类的友元类 C++UML图怎么表示一个类是另外一个类的友元类,求大神帮助 解决方案 类成员函数声明为另外一个类的友元 解决方案二: UML中貌似没有友元这个概念 解决方案三: http://request.uml.com.cn/index.asp 看看里面怎么说的...

c++-用友元类外函数调用类的私有成员,显示无法调用,是什么原因

问题描述 用友元类外函数调用类的私有成员,显示无法调用,是什么原因 #include #include using namespace std; class Date; class Time { private: int hour; int minute; int sec; public: Time(int h, int m, int s) :hour(h), minute(m), sec(s){} friend void display(Time & , Date & ); }; cla

剖析C++编程中friend关键字所修饰的友元函数和友元类_C 语言

在某些情况下,为不是类成员的函数或单独类中的所有函数授予成员级别的访问权会更方便.仅类实现器可以声明其友元.函数或类不能将其自身声明为任何类的友元.在类声明中,使用 friend 关键字和非成员函数名称或其他类,以允许其访问你的类的专用和受保护成员.语法 friend class-name; friend function-declarator; 友元声明如果声明以前未声明的友元函数,则该函数将被导出到封闭非类范围. 友元声明中声明的函数被视为已使用 extern 关键字声明.(有关 exter