通过友元函数实现两个不同类中私有成员变量的数据交换

原创 2015年07月08日 10:03:03

本代码中定义了两个相同的类,和一个交换信息的函数,信息交换函数同时是这两个类的友元类。

这样这个定义的信息交换函数就可以直接访问这个类的私有成员变量来进行相互间的信息交换。



//2015_July_8
// friend funciton to transmit value
#include "iostream"
using namespace std;
class CPeopleB;
class CPeopleA{
        string *ptr;
        int age;
        double salary;
    public:
        CPeopleA(){}
        CPeopleA(const string &str,int p_age, int p_salary):ptr(new string(str)),age(p_age),salary(p_salary){
        }
        friend void changeName(CPeopleA&, CPeopleB &);
        void output(){
            cout << "name = " << *ptr << endl;
            cout << "age = " << age << endl;
            cout << "salary = " << salary << endl;
        }
};
class CPeopleB{
        string *ptr;
        int age;
        double salary;
    public:
        CPeopleB(){}
        CPeopleB(const string &str,int p_age, double p_salary):ptr(new string(str)),age(p_age),salary(p_salary){
        }
        friend void changeName(CPeopleA &,CPeopleB &);
        void output(){
            cout << "name = " << *ptr << endl;
            cout << "age = " << age << endl;
            cout << "salary = " << salary << endl;
        }
};
void changeName(CPeopleA &a, CPeopleB &b){
    string *ptr;
    ptr = a.ptr;
    a.ptr = b.ptr;
    b.ptr = ptr;
    ptr = NULL;
}
int main(){
    CPeopleA tom("tom",1,1.0);
    CPeopleB jerry("jerry",2,2.0);
    changeName(tom,jerry);
    tom.output();
    jerry.output();
    return 0;
}



相关文章推荐

友元函数与静态成员变量的实例

//a.h文件 #ifndef A_H #define A_H class A { public: A():m_a(123){};//构造函数初始化 ~A(){}; void setval(...

友元函数、友元类、访问私有数据成员、友元关系

友元函数(friend function) 1. 什么是友元函数?     一个类的私有数据成员通常只能由类的函数成员来访问,而友元函数可以访问类的私有数据成员,也能访问其保护成员 2. 友元函...

不用友元,访问类的私有成员变量的方法

虽然没有现实意义,但对理解C++的对象模型是很有帮助的。 前几天,在论坛里看到一个帖子,内容是: (原帖见:http://community.csdn.net/Expert/topic/50...

VS2015友元函数重载操作运算符无法访问私有成员

问题是在看C++primer plus 私有继承部分出现的,按照书上的代码,在VS2015中发现编译不通过,提示为无法访问类的私有成员,该错误是在重载>>运算符时出现的,而其他友元函数访问私有成员未出...

友元函数 无法访问 类私有成员

#include  02usingnamespacestd;  03classcylinder  04{  05    friendistream operator>>(istream& is,cyl...

VC6.0中友元函数无法访问类私有成员的解决办法

举个例子: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

VC6.0中友元函数无法访问类私有成员的解决办法

#include using namespace std; class cylinder { friend istream operator>>(istream& is,cylinde...

C++:内嵌类、静态成员变量和函数、单例模式、友元函数和友元类

一、内嵌类 1. 什么是内嵌类: 内嵌类是指,一个类定义在另一个类的内部。 2. 类内声明,类外实现的方法: 返回类型 外部类::内嵌类::函数名(形参表) {...} /** 代码演示 *...

c++访问私有(private)成员变量的常用方法

类的对象不能直接访问类声明的私有成员变量,否则破坏了信息隐藏的目的。 在C++中,为了防止某些数据成员或成员函数从外部被直接访问,可以将它们声明为private,这样编译器会阻止任何来自外部非友元的...

C++ 私有成员变量的理解

C++ 私有成员变量的理解 私有成员变量的概念,在脑海中的现象是,以private关键字声明,是类的实现部分,不对外公开,不能在对象外部访问对象的私有成员变量. 然而,在实现拷贝构造函数和...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过友元函数实现两个不同类中私有成员变量的数据交换
举报原因:
原因补充:

(最多只允许输入30个字)