100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > C++友元函数 友元类与类模板

C++友元函数 友元类与类模板

时间:2018-11-10 02:49:25

相关推荐

C++友元函数 友元类与类模板

文章目录

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

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

#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, ); //实例化Date类的对象d1 //调用t1中的display函数,实参是Date类对象 ,这样就可以通过Time的对象访问Date对象中的私有数据 t1.display(d1); return 0;}

三、类模板的使用

#include <iostream>using namespace std;template<class numtype> //生命类模板,虚拟类型名为numtypeclass 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; }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。