有关于友元类,函数模板等
来源:互联网 发布:ubuntu 手机助手 编辑:程序博客网 时间:2024/06/06 09:28
一,友元类
1.一份简单的代码:
#include <iostream>
class c3{public:
friend class c1;
c3(int i):private_num(i){}
int get_private_num(){return private_num;}
private:
int private_num;
};
class c1{
public:
c1(int i):number(i){}
c1(){}
int get_number(){ return number;}
int get_c3_num(class c3 i){ return i.private_num;}
private:
int number;
};
class c2:public c1{
public:
c2(){}
int get_c3_number(class c3 i){ return c1::get_c3_num(i);}
};
int main ()
{
class c3 t3(3);
std::cout << "in class c3 " << t3.get_private_num() << std::endl;
class c1 t1(1);
std::cout << "in class c1 " << t1.get_number() << std::endl;
std::cout << "in class c1 " << t1.get_c3_num(t3) << std::endl;
class c2 t2;
std::cout << "in class c2 " << t2.get_c3_number(t3) << std::endl;
return 0;
}
2.运行结果:
in class c3 3
in class c1 1
in class c1 3
in class c2 3
3.一点理解:
友元可以访问类的private和protected数据;
友元关系不能继承;
如果基类被授予友元关系,则只有基类具有特殊访问权限,该基类的派生类不能访问授予;
二,函数模板
1.一份简单的代码
#include <string>
#include <iostream>
#include <typeinfo>
template <typename T>
int compare(const T &a,const T &b)
{
std::cout << typeid(a).name() << ","<< a << "," << b << std::endl;
if(a > b) return 1;
if(a < b) return -1;
return 0;
}
int main(int argc,char* argv[])
{
int iret;
std::string a = "1231";
std::string b = "234";
iret = compare(a,b);
std::cout << iret << std::endl;
iret = compare(2,1);
std::cout << iret << std::endl;
iret = compare(2.1,2.1);
std::cout << iret << std::endl;
return 0;
}
2.运行结果:
Ss,1231,234
-1
i,2,1
1
d,2.1,2.1
0
3.一点理解:
函数模板是一个独立于类型的函数,可作为一种方式,产生函数的特定类型的版本;
模板定义以关键字template开始,后接模板形参表,形参表不能为空;
类型形参跟在关键字class或typename之后定义,在这里class和typename没有区别;
模板形参作用域:模板形参的名字可以在声明为模板形参之后直到模板声明或定义的末尾处使用;
- 有关于友元类,函数模板等
- 有关于虚函数
- 有关于模板的分离编译
- 有关于虚函数的问题
- 有关于指针函数的问题
- ABAP中有关于换行符,TAB KEY等
- ABAP中有关于换行符,TAB KEY等
- 混迹于C++之函数模板
- c++函数模板于类中的应用
- 有关cvUpdateMotionHishtory,cvCalcMotionGradient等函数的使用
- 有关于C++基类、派生类函数的一些感悟
- 有关于全排列next_permutation函数的题
- 利用smarty模板(登录、有关信息操作等功能)
- 利用smarty模板(登录、有关信息操作等功能)
- 有关函数模板和类模板的说法
- 内联函数、模板函数 之于头文件
- 有关模板
- 关于数据库的一些操作! 实用为主! 有关于时间加减!临时表等……
- bootstrap-3-基本标签使用类
- Maven笔记8-Maven中使用Nexus创建私服
- 网易云(网易蜂巢)对象存储--mp4播放
- Spring Boot 性能优化
- popen()
- 有关于友元类,函数模板等
- express入门(11)- MongoDB
- JAVA处理Excel的三种实现方式(二)
- java 后台封装json应用
- Spring 事务不回滚的几个原因
- Windows下安装Web.py快速指南
- WebView的用法
- Unity3D Entitas 谷歌的ECS Entity Component System入门学习1
- Android Wi-Fi Deauthenticated Reason Code(Linux WiFi)