0
点赞
收藏
分享

微信扫一扫

C++ 基础语法 8(友元)


#include<iostream>
using namespace std;
#include<string>
#include<time.h>

//友元 -----关键字:friend
//让一个 函数 或者是 类 访问另一个 类当中的私有成员!!!!!
//三种实现形式:1、全局函数做友元
// 2、类做友元
// 3、成员函数做友元

//1、全局函数做友元

//class Buliding //建筑物类
//
//{
//
// friend void goodFriend(Buliding &building);//!!!!!goodFriend这个函数可以访问 类当中的 私有成员!!!!!-----定义之后 只要写在类最上面即可!
//
//public:
// Buliding()//构造函数赋值
// {
// m_SittingRoom = "客厅";
// m_BedRoom = "卧室";
// }
//
//public:
// string m_SittingRoom;//客厅
//private:
// string m_BedRoom;//卧室
//};
//
////全局函数---创建一个好友可以访问 公共成员 也可以访问 私有成员
//void goodFriend(Buliding &building)
//{
// cout << "好基友的全局函数正在访问building的: " << building.m_SittingRoom << endl; //公共属性在类外是可以被访问到的!!!!!
//
// cout << "好基友的全局函数正在访问building的: " << building.m_BedRoom<< endl; //在类内注释后是可以访问类当中的私有元素的!!!!!
//}
//void test01()
//{
// Buliding p1;
// goodFriend(p1);
//
//}
//int main()
//{
// test01();
// system("pause");
// return 0;
//}

//2、类做友元

//class Building
//{
// friend class goodfriend; //goodfriend这个类是本类的 友好类 可以访问 Building 这个类当中的所有内容!!!!!
//public:
// Building(); //在类外给函数 赋值 操作!!!!!
//
//public:
// string m_SittingRoom;//客厅
//
//private:
// string m_BedRoom;//卧室
//
//};
//
//class goodfriend
//{
//public:
// goodfriend(); //创建goodfriend的构造函数 //在类外给函数 赋值 操作!!!!!
//public:
// void visit();//参观函数 访问Building当中的属性
//
// Building *building;//Building这个类的指针
//
//};
//
//
////在类外写成员函数!!!!! -----在 !函数名前面 ! 加上类的属于!!!!!
//Building::Building()//Building构造函数赋值
//{
// m_SittingRoom = "客厅";
// m_BedRoom = "卧室";
//}
//
//goodfriend::goodfriend() //goodfiend的构造函数外部操作
//{
// //创建建筑物的对象!
// building = new Building;//new堆区会返回相同 类型的数据指针! 所以用buildin内部的指针去维护堆区的对象!!!!!?????
// //这里 building 是指针变量!!!!!
// //调用了Building的类 所以调用了Building的构造函数
//}
//
//void goodfriend::visit() //要加上函数的返回类型
//{
// cout << "好基友的类正在访问 : " << building->m_SittingRoom << endl;
//
// cout << "好基友的类正在访问 : " << building->m_BedRoom << endl;
//}
//
//void test01()
//{
// goodfriend a;//创建对象 a
// a.visit();//调用visit函数 并且访问函数当中的building->m_SittingRoom 与 building->m_BedRoom!
//
//}
//int main()
//{
// test01();// -----调用这个函数的最终效果是 显示 正在访问 客厅 与 卧室!
// system("pause");
// return 0;
//}

//3、成员函数做友元
class Building

{

friend void goodFriend::visit1();//告诉编译器 goodFriend成员函数作为本类的好友 ,可以访问私有成员!!!!!public:

Building();//构造函数声明public:

string m_SittingRoom;//客厅

private:

string m_BedRoom;//卧室

};

class goodFriend

{

public:

goodFriend();//构造函数

void visit1();//让visit1函数可以访问Building当中私有的成员

void visit2();//人visit2函数不能访问Building当中私有的成员
Building *building;
};
//类外实现成员函数

Building::Building() //构造函数

{

m_SittingRoom = "客厅";

m_BedRoom = "卧室";

}goodFriend::goodFriend()

{

building = new Building;//创建Building对象的指针维护建筑物这个对象

}void goodFriend::visit1()

{

cout << "visit1 函数正在访问 : " << building->m_SittingRoom << endl;

}

void goodFriend::visit2()

{

cout << "visit2 函数正在访问 : " << building->m_SittingRoom << endl;

//报错 因为其不是特殊声明!!!!!cout << "visit2 函数正在访问 : " << building->m_BedRoom << endl;

}void test01()

{

goodFriend a;

a.visit1();

a.visit2();

}

int main()

{

test01();

system("pause");

return 0;

}


举报

相关推荐

[C++]友元

C++友元

C++ 友元

C++友元函数和友元类

c++ 友元函数

0 条评论