C++知识点案例 笔记-5
1.关系运算符重载
2.类型转换函数重载
3.转换构造函数
4.函数模板
5.显式实例化
6.类模板外定义模板函数
1.关系运算符重载
==关系运算符重载==
//直接(按分数)比较两个对象
#include<iostream>
using namespace std;
class Student
{
public:
    friend ostream& operator<< (ostream& os,const Student& st);
    friend istream& operator>> (istream& is, Student& st);
    friend bool operator == (const Student& st1,const Student& st2);
    friend bool operator != (const Student& st1,const Student& st2);
    friend bool operator >  (const Student& st1,const Student& st2);
    friend bool operator <  (const Student& st1,const Student& st2);
private:
    int id;
    double  score;
};
ostream& operator<< (ostream& os,const Student& st)
{
    os <<"id:"<<st.id<<"score"<<st.score;
    return os;
}
istream& operator>> (istream& is,Student& st)
{
    is >> st.id >> st.score;
    return is;
}
bool operator == (const Student& st1,const Student& st2)
{
    return st1.score == st2.score;
}
bool operator != (const Student& st1,const Student& st2)
{
    return !(st1.score == st2.score);
}
bool operator > (const Student& st1,const Student& st2)
{
    return (st1.score > st2.score);
}
bool operator < (const Student& st1,const Student& st2)
{
    return (st1.score < st1.score);
}
int main()
{
    Student st1,st2;
    cout<<"请输入两名学生的ID和score:"<<endl;
    cin>>st1>>st2;
    if (st1 > st2)
    {
        cout<<"st1分数高于st2"<<endl;
    }
    else if(st1 < st2)
    {
        cout<<"st1分数低于st2"<<endl;
    }
    else
    {
        cout<<"两名学生分数相同"<<endl;
    }
    return 0;
}
2.类型转换函数重载
==类型转换函数重载==
#include<iostream>
using namespace std;
class bian
{
private:
    int m,n;
public:
    bian(int m1,int n1):m(m1),n(n1){}
    void show()
    {
        cout<<"bb:"<<endl;cout<<m<<","<<n<<endl;
    }
    operator char()
    {
        return static_cast<char>(m);
    }
};
int main()
{
    bian bb(69,96);
    bb.show();
    char ch = bb;
    cout<<ch<<endl;
    return 0;
}
3.转换构造函数
==转换构造函数==
#include<iostream>
using namespace std;
class jie
{
private:
    int m,n;
public:
    jie(int a, int b):m(a),n(b){}
    jie(double c)
    {
        cout<<"把m转换成字符型,并给n一个值"<<endl;
        m = static_cast<int>(c);
        n = 0;
    }
    void show()
    {
        cout<<m<<" "<<n<<endl;
    }
};
int main()
{
    jie s1(58,68);
    jie s2(2.333);
    cout<<"s1"<<endl;
    s1.show();
    cout<<"s2"<<endl;
    s2.show();
    return 0;
}
4.函数模板
==函数模板==
//目的 函数运行与类型无关
#include<iostream>
using namespace std;
template<typename T>
T add(T x,T y)
{
    return x+y;
}
int main()
{
    cout<<add(5,516)<<endl;
    cout<<add(3.1415,6.011)<<endl;
    return 0;
}
5.显式实例化
==显式实例化==
//指定参数类型,便于不同类型数据类型相加
#include<iostream>
using namespace std;
template<typename T>
T add(T x,T y)
{
    return x+y;
}
template int add<int>(int x,int y);
int main()
{
    cout<<add(5,516)<<endl;
    cout<<add<int>(3.1415,'a')<<endl;
    return 0;
}
6.类模板外定义模板函数
==类模板外定义模板函数==
#include<iostream>
using namespace std;
template<typename T>
class Fly
{
private:
    int size;
    T* str;
public:
    Fly(T fly[],int s);
    void show();
};
//类模板外定义成员函数
template<typename T>
Fly<T>::Fly(T fly[],int s)
{
    str = new T[s];
    size = s ;
    for(int i = 0;i < size; i++)
    {
        str[i] = fly[i];
    }
}
template<typename T>
void Fly<T>::show()
{
    for(int k = 0; k <size; k++)
    {
        cout<<*(str + k)<<endl;
    }
}
int main()
{
    char ffly[]={'a','d','f','e','t'};
    //创建类模板对象
    Fly<char> F1(ffly,5);
    F1.show();
    int jfly[]={5,2,1,1314};
    //创建类模板对象
    Fly<int> F2(jfly,4);
    F2.show();
    return 0;
}
												
											C++知识点案例 笔记-5的更多相关文章
- C++知识点案例 笔记-6
		
1.三种友元函数 -非模板友元函数 -约束模板友元函数 -非约束模板友元函数 2.非类型参数 3.模板特化 1.三种友元函数 =====三种友元函数===== --1---非模板友元函数 #inclu ...
 - C++知识点案例 笔记-4
		
1.纯虚函数 2.抽象类 3.内部类 4.运算符重载 5.类的函数重载 6.友元的函数重载 1.纯虚函数 ==纯虚函数== //有时基类中无法给出函数的具体体现,定义纯虚函数可以为派生函数保留一个函数 ...
 - C++知识点案例 笔记-3
		
1.基类指针等与派生类的兼容 2.构造函数 3.析构函数 4.虚基类 5.虚函数 6.虚析构函数 ==基类指针等与派生类的兼容== #include <iostream> #include ...
 - C++知识点案例 笔记-2
		
1.友元函数 2.友元类 3.继承(公有继承) 4.公有继承的访问权限 5.私有继承的访问权限 6.保护继承的访问权限(两次继承) ==友元函数== #include <iostream> ...
 - C++知识点案例 笔记-1
		
1.重载函数 2.内联函数 3.New.Delete 4.重载与.const形参 5.常数据成员 6.静态成员函数 ==重载函数== #include <iostream> using n ...
 - Java后端高频知识点学习笔记1---Java基础
		
Java后端高频知识点学习笔记1---Java基础 参考地址:牛_客_网 https://www.nowcoder.com/discuss/819297 1.重载和重写的区别 重载:同一类中多个同名方 ...
 - [置顶] 单片机C语言易错知识点经验笔记
		
今天写这一篇文章并不是因为已经想好了一篇文章才写下来,而是我要将这一篇文章作为一个长期的笔记来写,我会一直更新.在进行单片机开发时,经常都会出现一些很不起眼的问题,这些问题其实都是很基础的c语言知识点 ...
 - 面试总结:鹅厂Linux后台开发面试笔试C++知识点参考笔记
		
文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 文章是由自己笔试面试腾讯的笔记整理而来,整理的时候又回顾了一遍,中间工 ...
 - php 知识点 --个人笔记
		
##2015-09-06 为防止用户看到错误信息,而出现的不友好界面.故一般性会在php.ini里设置:display_errors = Off;不过在开发的时候,我们有时候需要打开错误信息.这时候, ...
 
随机推荐
- 火爆外网的 DGS 框架使用
			
Netflix 已开放其 Domain Graph Service(DGS)框架的源代码 ,该框架是为了方便整合 GraphQL 使用,用于简化 GraphQL 的实现. GraphQL 主要是作用于 ...
 - HashSet、CopyOnWriteArraySet、ConcurrentSkipListSet源码解析(JDK1.8)
			
目录 HashSet源码解析 HashSet简单使用的demo HashSet中的变量 HashSet的构造函数 HashSet的add方法 HashSet的iterator方法 HashSet的si ...
 - SQL Server CDC配合Kafka Connect监听数据变化
			
写在前面 好久没更新Blog了,从CRUD Boy转型大数据开发,拉宽了不少的知识面,从今年年初开始筹备.组建.招兵买马,到现在稳定开搞中,期间踏过无数的火坑,也许除了这篇还很写上三四篇. 进入主题, ...
 - KMP(梅开三度之数据结构详解版
			
前言 KMP算法是一种字符串匹配算法,其重中之重是next数组的构建,其代码的简洁与神奇使其广受关注. 但不难发现,acm中学到的KMP和数据结构里面学到的KMP并不一样o(︶︿︶)o 之前我写过ac ...
 - 一文带你掌握MySQL查询优化技能
			
查询优化本就不是一蹴而就的,需要学会使用对应的工具.借鉴别人的经验来对SQL进行优化,并且提升自己. 分享一套博主觉得讲的很详细很实用的MySQL教程给大家,可直接点击观看! https://www. ...
 - 10- JMeter5.1.1 工具快速入门
			
什么是JMeter JMeter是Apache组织开发的开源软件,由Java语言实现. 主要用于软件系统性能测试,他最初被设计用于web测试,后来被扩展到其他领域. Jmeter特点 http://w ...
 - hdu2235 机器人的容器
			
题意: 机器人的容器 Time Limit: 3000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
 - C++ Log日志系统
			
闲得无聊,瞎写的一个东西. 好多地方能够优化甚至可能重写,也没写,就记下了个思路在这里. 主要熟练一下C++17的内容. version = 0.1 lc_log .h 1 #pragma once ...
 - 【python】Leetcode每日一题-颠倒二进制位
			
[python]Leetcode每日一题-颠倒二进制位 [题目描述] 颠倒给定的 32 位无符号整数的二进制位. 示例1: 输入: 00000010100101000001111010011100 输 ...
 - 使用jenkins一键打包发布vue项目
			
jenkins的安装 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件. Jenkins 支持各种运行方式,可通过系统包.Docker 或者通过一个独立 ...