文章目录

  • 一、普通函数声明为友元涵数
  • 二、声明类的成员函数为其他类的友元函数
  • 三、类模板的使用

一、普通函数声明为友元涵数

#include <iostream>
using namespace std;class Time
{public:Time(int, int, int);  //声明带参构造函数friend void display(Time &);  //声明display函数为Time类的友元函数
private://定义私有成员数据int hour;int minute;int sec;
};//定义 带参构造函数
Time::Time(int h, int m, int s)
{hour= h;minute= m;sec= s;
}//定义普通函数,形参t是Time类对象的引用
void display(Time& t)
{cout << t.hour << ":" << t.minute << ":" << t.sec << endl;
} int main()
{Time t1(11, 12, 13);  //实例化对象,传入参数 display(t1);  //传入的实参是Time类的对象 return 0;
}

二、声明类的成员函数为其他类的友元函数

#include <iostream>
using namespace std;class Date;  //声明Date类 //display是Time类的成员函数
class Time
{public:Time(int, int, int);  //声明带参构造函数void display(Date &);  //定义成员函数,形参是Date类对象的引用
private://定义私有成员数据int hour;int minute;int sec;
};class Date
{public:Date(int, int, int);  //声明构造函数//声明Time类中的display函数为本类的友元函数 friend void Time::display(Date &);
private:int month;int day;int year;
};//定义Time类的构造函数
Time::Time(int h, int m, int s)
{hour= h;minute= m;sec= s;
}//定义Time类的友元成员函数 :可以访问其他类的私有成员数据
void Time::display(Date& d)  //输出年月日,时分秒
{cout << d.month << "/" << d.day << "/" << d.year << endl;  //引用Time类中的私有数据 cout << hour << ":" << minute << ":" << sec << endl;  //引用本类对象中的私有数据
}//定义Date类的构造函数
Date::Date(int m, int d, int y)
{month= m;day= d;year= y;
}int main()
{Time t1(10, 20, 30);  //实例化Time的对象t1 Date d1(3, 25, 2021);  //实例化Date类的对象d1 //调用t1中的display函数,实参是Date类对象 ,这样就可以通过Time的对象访问Date对象中的私有数据 t1.display(d1);  return 0;
}

三、类模板的使用

#include <iostream>
using namespace std;template<class numtype>  //生命类模板,虚拟类型名为numtype
class Compare
{public://定义构造函数,传入的参数类型为自定义numtypeCompare(numtype a, numtype b)   {x= a;y= b;}//定义函数类型 暂定 为numtype的函数numtype max()   {return (x>y)?x:y;  //若x>y,则返回x }numtype min(){return (x<y)?x:y;}
private:numtype x, y;  //私有成员函数类型暂定为numtype
}; int main()
{Compare<int> cmp1(3,7);  //定义对象cmp1,用于两个整数的比较 cout << "两个数中最大的为:" << cmp1.max() << endl;cout << "两个数中最小值为:" << cmp1.min() << endl;Compare<float> cmp2(25.1, 45.8);    //定义对象cmp2,用于两个浮点数的比较cout << "两个数中最大的为:" << cmp2.max() << endl;cout << "两个数中最小值为:" << cmp2.min() << endl; Compare<char> cmp3('u', 'U');    //定义对象cmp2,用于两个字符的比较cout << "两个字符中ASCII大的为:" << cmp3.max() << endl;cout << "两个字符中ASCII小的为:" << cmp3.min() << endl;return 0;
}

C++友元函数、友元类与类模板相关推荐

  1. 练习友元函数,有元类,快排和全排列问题

    写了一小段代码: 练习一下友元类和友元函数的声明和使用: 练习一下最简单的快排算法: 练习一下递归的方法处理全排列问题. 代码: 1 #include <stdlib.h> 2 #incl ...

  2. 【C++ 语言】面向对象 ( 成员函数 | 常量函数 | 友元函数 | 友元类 | 单例类 )

    文章目录 成员函数 常量函数 友元函数 new 创建对象 友元类 单例类 成员函数 此处继续上一篇博客继续向后讲解C++面向对象 类成员方法 , 除了定义构造方法与析构方法之外 , 还可以定义普通的成 ...

  3. 友元函数 友元类 友元成员函数

    友元 一般来说,类内的私有数据是对外不可见的,但在有些情况下,我们需要在类外对该类的私有数据进行访问,这就需要用到一种新技术--友元(friend),即在声明前添加关键字friend. 友元关系是单向 ...

  4. C++ 类的知识 | 构造函数再探、匿名对象、友元函数、内部类、类的const成员、类的static成员

    文章目录 构造函数再探 以下代码共调用多少次拷贝构造函数 委托构造函数 概念 形式 匿名对象 友元 友元的声明 友元类 令成员函数作为友元 函数重载和友元 注意 内部类 特性 类的const成员 可变 ...

  5. C++笔记 友元函数 友元类

    友元函数 :友元函数是可以直接访问类的私有成员的非成员函数. 它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend,其格式如下:     ...

  6. c++ 友元函数,友元类

    友元函数破坏了类的封装特性,它可以在类的外部访问类的私有属性 #include "iostream" using namespace std; class A1 { public: ...

  7. 模板类中使用友元函数的方式,派生类友元函数对基类的成员使用情况

    在一般友元函数的前面加上 template<typename T),注意在函数的声明和定义处都要加这个模板 例如: //模板类,长方体类 template <typename Elemen ...

  8. C++ 类模板中友元函数问题

    #pragma once #include<iostream> template<typename T> class TestFriendTemplate { public:/ ...

  9. 学习笔记-----C++模板类中友元函数重载输出运算符时提示无法解析的外部符号解决方案

    今天在写单向链表实现线性表的时候打算重载输出运算符用来将线性表输出,结果无奈又遇到了问题. 大致代码如下 <pre name="code" class="cpp&q ...

  10. 友元函数,友元类,类模板

    C++提供友元机制,允许外部类和函数访问类的私有成员和保护成员的辅助方法,即将它们声明为一个给定类的友元类(或友元函数),使其具有类成员函数的访问权限.但友元本身不是类的成员,它不属于任何类. 优点: ...

最新文章

  1. lucene python_Python下的Lucene,PyLucene
  2. PMcaff-培训 | 活动报名结束,押金和邮件须知的那些事儿
  3. 重磅 |“吴恩达deeplearningai”官方微信公众号已经上线!
  4. 基于Boost::beast模块的异步WebSocket服务器
  5. 响应式中解决图片大小不一样,导致盒子高度不一样的问题
  6. Django与Ajax
  7. 03-dotnet core创建区域[Areas]及后台搭建
  8. git-osc自己定义控件之:CircleImageView
  9. chmod命令(chmod函数)自动清除设置用户ID位和设置组ID位
  10. 简评游戏人工智能相关的中文书(补遗)
  11. 3.1 测试能否对标准输入设置偏移量
  12. swagger2 注解说明
  13. 解决 win10飞行模式 无限自动开关 无法关闭
  14. 《君生我未生,我生君已老》详解
  15. 怎么给图片加滤镜?这三个实用方法教会你
  16. F5 Networks:应用交付的“4G”挑战
  17. 命令行修改文件md5
  18. 初中计算机科学生情况,初中计算机科学与技术的现代化运用探究
  19. 手写计算器java_可编程科学计算器app
  20. 小灰的基金,总算是回血一波。。。

热门文章

  1. 启动模拟器要20多分钟_有硬核开发者将Windows 10X模拟器镜像提取并在物理机上成功安装...
  2. 电话号码正则表达式 (包含电话号码 和 手机号码)
  3. css3动画与@keyframes关键帧
  4. word是不是计算机硬件,word及excel模拟试题1_计算机硬件及应用_IT/计算机_资料
  5. html5与之前版本,IT兄弟连HTML5教程HTML5做到了与之前版本的兼容
  6. android x86 uc,android x86 固件定制
  7. dhcp 服务器发出了 dhcpnack 消息,跪求DHCP报文分析
  8. 知道python吗_你知道什么是Python吗
  9. Java当中的异常处理
  10. w3cschool oracle,AJAX 数据库 | w3cschool菜鸟教程