c++语言 友元类和友元方法 将普通函数声明为友元函数
2012-11-07 17:24
363 查看
//c++语言 友元类和友元方法 //友元函数:如果在一个类的外面定义了一个函数(该函数不属于这个类),当类中用friend对该函数进行声明后, 该函数就可以访问类中的所有成员. //友元函数分为:将普通函数声明为友元函数,将其他类中的成员函数声明为友元函数. //***将普通函数声明为友元函数 #include "stdafx.h" #include <iostream> using namespace std; class CShop //声明一个CShop类 { public: CShop(int size, int price); void ShowSize(); void ShowPrice(); friend int ChangePrice(CShop &shop, int price); private: int m_size; int m_price; }; CShop::CShop(int size, int price) { m_size = size; m_price = price; } void CShop::ShowSize() { cout << "商品的数量:" << m_size << endl; } void CShop::ShowPrice() { cout << "商品的价格:" << m_price << endl; } int ChangePrice(CShop &shop, int price) //友元函数的定义 { shop.m_price = price; //在友元函数中访问私有成员变量 return shop.m_price; } int main(int argc, char * argv[]) { CShop shop(50, 100); //定义一个CShop类的对象, 并进行初始化 cout << "旧的价格:" << endl; shop.ShowPrice(); shop.ShowSize(); ChangePrice(shop, 200); //调用友元函数 cout << "新的价格" << endl; shop.ShowPrice(); shop.ShowSize(); return 0; } //在代码中可以看到,在类中声明外界的普通函数为友元函数如下:friend int ChangePrice(CShop &shop, int price); 这样, 在该函数的定义中就可以访问类对象中的私有成员. //关于友元,以下几点需要注意: //一.友元关系是单向的,而不是双向的.如果声明B类是A类的友元类,不等于A类是B类的友元类,A类中的成员函数不能访问B类中的私有成员 //二.友元关系不能传递.如果A是B的友元,B是C的友元,并不意味着A是C的友元. //三.友元关系也不能继承.如果A是B的友元,C派生于A,并不意味着C是B的友元. //在实际的工作中,如果没有必要的话,一般并不将整个类都声明为友元,只是将特定的成员函数声明为友元函数,这样更安全一些.
相关文章推荐
- C++模板类内友元(友元函数,友元类)声明的三种情况
- C++模板类内友元(友元函数,友元类)声明的三种情况
- 将普通函数声明为友元函数
- C++友元函数、友元类、友元成员函数
- ios 中调用函数的方法是消息传递,这个和普通的函数调用的区别是,你可以随时对一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以Objective-C可以在runtime的时候
- C++模板类内友元(友元函数,友元类)声明的三种情况
- C++模板类内友元(友元函数,友元类)声明的三种情况
- 将普通函数声明为友元函数
- C++将普通函数声明为友元函数
- 【C/C++学院】0825-类模板/final_override/类模板与普通类的派生类模板虚函数抽象模板类/类模板友元/位运算算法以及类声明/Rtti 实时类型检测/高级new创建/类以及函数包装器
- 普通函数、构造函数、inline函数、友元函数为什么不能声明为虚函数
- 友元函数、友元类、友元成员函数
- 友元函数、友元类、友元成员函数
- 友元简介:友元函数,友元类和友元成员函数
- 友元类用发 ,看到网上的友元类错误百出(把调用的类当做私有函数用)不好
- C++的友元机制:友元类和友元函数
- javascript中声明函数的方法及调用函数的返回值
- 一个类的成员函数声明为另一个类的友元函数
- Effective C++ (E3 22、23)笔记之成员变量声明为private、以非成员非友元函数替代成员函数
- Go语言中普通函数与方法的区别