当前位置: 首页 > news >正文

自适应网站制作网络公司网站

自适应网站制作,网络公司网站,web前端是干什么的,mysql做网站模板 C提供了模板(template)编程的概念。所谓模板,实际上是建立一个通用函数或类, 其 类内部的类型和函数的形参类型不具体指定 ,用一个虚拟的类型来代表。这种通用的方式称 为模板。 模板是泛型编程的基础, 泛型编程即以一种独立于任何特定…

模板

C++提供了模板(template)编程的概念。所谓模板,实际上是建立一个通用函数或类,
类内部的类型和函数的形参类型不具体指定 ,用一个虚拟的类型来代表。这种通用的方式称
为模板。 模板是泛型编程的基础, 泛型编程即以一种独立于任何特定类型的方式编写代码
如: vector

函数模板(可以嵌套使用)

模板函数就是函数模板的自动实现

功能:
使用函数体相同的函数都可以用这个模板替代
实现多个函数用来返回两个数的最大值,要求能支持 char 类型、int 类型、double
template <typename T>
如:
template <typename T>//这里的类属参数 T在下面函数体的 参数中必须出现一次
        T Max(T a, T b) {
            return a > b ? a : b;
        }
形式:
cout << Max(a, b) << endl;//编译器自动推导类型
cout << Max<int>(a,b)<<endl;//显示类型调用
#include <iostream>
using namespace std;template <typename T>
T Max(T a, T b) {return a > b ? a : b;
}
int main(void) {int a = 4;int b = 5;float x = 1.2f;float y = 2.6f;cout << Max(a, b) << endl;//编译器自动推导类型cout << Max<int>(a,b)<<endl;//显示类型调用cout << Max(x, y) << endl;return 0;
}

函数模板和函数重载

//当函数模板和普通函数都符合调用时,优先选择普通函数
//Max(a,b);
//如果 显式指定类型 的使用函数模板,则使用<> 类型列表
//Max<>(a, b);
//如果函数模板会产生更好的匹配,使用函数模板

 函数模板的调用机制

函数模板在调用的时候,会根据调用者的数据类型,创建一个匹配的函数

类模板

类模板和函数模板一致

在类使用数据类型的地方都可以用模板的类属参数进行替换

(成员数据的数据类型,构造函数的参数类型,成员函数的返回值类型)

注:在模板类定义对象的时候必须指定为显示指定类型<>

当为单个参数时:

#include <iostream>
using namespace std;
template <typename T>
class A {
public:A(T a) {this->a = a;}T getA() {return a;}
private:T a;
};int main(void) {A<int> aa(666);cout << aa.getA() << endl;return 0;
}

当为多个参数时

#include <iostream>
using namespace std;
template <typename T1,typename T2>
class A {
private:T1 a;T2 b;
public:A(T1 a ,T2 b) {this->a = a;this->b = b;}T1 getA() {return a;}T2 getB() {return b;}
};int main(void) {A<int, double> aa(12,4.5);cout << aa.getA() << endl;cout << aa.getB() << endl;return 0;
}

当类作为函数参数的时候

 double add(A<int, double>& a) {
    double sum = 0;
    sum = a.getA() + a.getB();
    return sum;
}

当子类继承父类(父类为模板类时)

 class B :public A<int, double> {
    B(int a, double b):A(a,b) {}
};

当子类是模板类,父类是一般类时 

 和普通继承一样

#include <iostream>
using namespace std;class B {
protected:int  a;double  b;
public:B(int a=1, double b=1.2) {this->a = a;this->b = b;}
};template <typename T1, typename T2>
class A :public B{
public:A();A(T1 a, T2 b) :B(a, b) {}T1 getA() {return a;}T2 getB() {return b;}
};double add(A<int, double>& a) {double sum = 0;sum = a.getA() + a.getB();return sum;
}
int main(void) {A<int ,double> aa(12,12.2);cout << aa.getA() << endl;cout << aa.getB() << endl;return 0;
}

当子类和父类都是模板类

和普通继承一样

#include <iostream>
using namespace std;template <typename T1, typename T2>
class B {
public:B(T1 a, T2 b){this->a = a;this->b = b;}T1 getA() {return a;}T2 getB() {return b;}
protected:T1 a;T2 b;
};template <typename T1, typename T2>
class A :public B<int, double>{
public:A();A(T1 a, T2 b) :B(a, b) {}T1 getA() {return a;}T2 getB() {return b;}
};double add(A<int, double>& a) {double sum = 0;sum = a.getA() + a.getB();return sum;
}
int main(void) {A<int, double> aa1(10, 10.2);cout << aa1.getA() << endl;cout << aa1.getB() << endl;A<int ,double> aa(12,12.2);cout << aa.getA() << endl;cout << aa.getB() << endl;return 0;
}

类模板和友元函数 

(1) 类内部声明友元函数,必须写成一下形式
template < typename T>
friend A<T> addA (A<T> &a, A<T> &b);
(2) 友元函数实现 必须写成
template < typename T>
A<T> add(A<T> &a, A<T> &b) {
        //......
}
(3) 友元函数调用 必须写成
A< int > c4 = addA <int> (c1, c2);

 类模板的封装

这里仅分为两个文件(.h和.cpp+main.cpp)

函数前声明 template
< 类型形式参数表 >
类的成员函数前的 类限定域说明必须要带上虚拟参数列表
template<typename T1>
A<T1>::A(T1 a)
{
    this->a = a;
}
返回的变量是模板类的对象时必须带上虚拟参数列表
T1 A<T1>::getA() {
    return a;
}
成员函数参数中出现模板类的对象时必须带上虚拟参数列表(也可以不带)
A<T1> A<T1>::operator+( const A<T1> & other)
{
    A<T1> tmp = this->a + other.a;
    return tmp.a;
}
成员函数内部没有限定( 可带可以不带 )
A<T1> A<T1>::operator+( const A<T1> & other)
{
  
 A<T1> tmp = this->a + other.a;
    return tmp.a;
}
类模板封装单参: 
.h
#include <iostream>
using namespace std;template <typename T1>
class A {
public:A(T1 a);T1 getA();A operator+(const A& other);void print();
private:T1 a;
};.cpp
#include <iostream>
using namespace std;
#include "A.h"template<typename T1>
A<T1>::A(T1 a)
{this->a = a;
}
template <typename T1>
T1 A<T1>::getA() {return a;
}
template<typename T1>
A<T1> A<T1>::operator+(const A& other)
{A tmp = this->a + other.a;return tmp.a;
}template<typename T1>
void A<T1>::print()
{cout << this->a << endl;
}
int main(void) {A<int> a(12);A<int> b(11);A<int> c = a + b;c.print();return 0;
}

 这里仅分为三个文件(.h 和  .cpp  和  main.cpp)

如果分为这三个文件,那么只包含.h头文件就会报错C++ 类模板“无法解析的外部符号

在封装有三个文件的时候mian.cpp中就不用包含.h头文件了,仅包含.cpp文件即可

#include <iostream>
using namespace std;

//#include "A.h"//同时包含两个或者仅包含.h都会报错
#include "A.cpp"

int main(void) {
    A<int> a(12);
    A<int> b(11);
    A<int> c = a + b;
    c.print();
    return 0;
}

类模板封装多参

算术运算符重载多参

template<typename T1, typename T2>
A1<T1, T2> A1<T1, T2>::operator+(const A1<T1,T2>& other)
{
    A1<T1, T2> tmp{ this->a + other.a,this->b + other.b };
    return tmp;

输出运算符重载多参

template<typename T1, typename T2>
friend ostream& operator<<(ostream& os, const A1<T1, T2>& other);//设置为友元

template<typename T1, typename T2>
ostream& operator<<(ostream& os, const A1<T1, T2>& other)
{
    //“T1 A1<T1,double>::getA(void)”: 
    // 不能将“this”指针从“const A1<int,double>”转换为“A1<int,double> 
    //是因为传入的是const引用,但是调用了非const方法。
    os << other.getA() << " " << other.getB() << endl;
    //os << other.a <<" " << other.b << endl;
    return os;
}

 .h

#pragma once#include <iostream>
using namespace std;template <typename T1, typename T2>
class A1 {
public:A1(T1 a, T2 b);T1 getA()const;T2 getB()const;A1<T1, T2> operator+(const A1& other);template<typename T1, typename T2>friend ostream& operator<<(ostream& os, const A1<T1, T2>& other);
public:T1 a;T2 b;
};template<typename T1, typename T2>
ostream& operator<<(ostream& os, const A1<T1, T2>& other)
{os << other.getA() << " " << other.getB() << endl;//os << other.a <<" " << other.b << endl;return os;
}

 .cpp

#include "A1.h"
#include <iostream>
using namespace std;
template<typename T1, typename T2>
A1<T1, T2>::A1(T1 a, T2 b):a(a),b(b)
{
}
template <typename T1, typename T2>
T1 A1<T1, T2>::getA() const{return a;
}
template<typename T1, typename T2>
T2 A1<T1, T2>::getB()const {return b;
}template<typename T1, typename T2>
A1<T1, T2> A1<T1, T2>::operator+(const A1<T1,T2>& other)
{A1<T1, T2> tmp{ this->a + other.a,this->b + other.b };return tmp;
}

主函数

#include <iostream>
#include "A1.cpp" //这里不要包含错了
int main(void) {A1<int, double> a(12, 3.3), b(13, 32.9);A1<int, double> c = a + b;cout << c << endl;return 0;
}

 

 类模板的静态成员数据

  从类模板实例化的每个模板类有自己的类模板数据成员,该 模板类的所有对象共享
一个 static 数据成员
和非模板类的 static 数据成员一样, 模板类的 static 数据成员也应该在文件范围定
义和初始化
  static 数据成员也可以使用虚拟类型参数 T

public:

        static T1 count;

//初始化静态成员数据
template<typename T1>
T1 A<T1>::count = 66;

//通过对象a对静态count赋值后
cout << a.count << endl;
a.count = 888;
cout << b.count << endl;
b.count = 1000;
cout << a.count << endl; 


文章转载自:
http://pepperidge.jqLx.cn
http://outmatch.jqLx.cn
http://fictioneer.jqLx.cn
http://verjuiced.jqLx.cn
http://solicitorship.jqLx.cn
http://showily.jqLx.cn
http://proxemic.jqLx.cn
http://quaver.jqLx.cn
http://syndiotactic.jqLx.cn
http://woodworker.jqLx.cn
http://myelocytic.jqLx.cn
http://fainting.jqLx.cn
http://travois.jqLx.cn
http://palette.jqLx.cn
http://grind.jqLx.cn
http://gratify.jqLx.cn
http://abroad.jqLx.cn
http://paner.jqLx.cn
http://defecate.jqLx.cn
http://deltoidal.jqLx.cn
http://nosewheel.jqLx.cn
http://presignify.jqLx.cn
http://afterbeat.jqLx.cn
http://rebunk.jqLx.cn
http://ante.jqLx.cn
http://lamentedly.jqLx.cn
http://aeromagnetic.jqLx.cn
http://synthetist.jqLx.cn
http://trackball.jqLx.cn
http://spilehole.jqLx.cn
http://linguistics.jqLx.cn
http://shovelbill.jqLx.cn
http://trishaw.jqLx.cn
http://chicom.jqLx.cn
http://cleaners.jqLx.cn
http://mat.jqLx.cn
http://rooted.jqLx.cn
http://gonadotrophic.jqLx.cn
http://dorsolateral.jqLx.cn
http://jounce.jqLx.cn
http://imago.jqLx.cn
http://capitalizable.jqLx.cn
http://oxfly.jqLx.cn
http://anticlinorium.jqLx.cn
http://pronuclear.jqLx.cn
http://cholecyst.jqLx.cn
http://pentecost.jqLx.cn
http://drainer.jqLx.cn
http://starflower.jqLx.cn
http://coheiress.jqLx.cn
http://microreproduction.jqLx.cn
http://balladize.jqLx.cn
http://thrid.jqLx.cn
http://centroplast.jqLx.cn
http://ligate.jqLx.cn
http://impecuniosity.jqLx.cn
http://perversion.jqLx.cn
http://realizingly.jqLx.cn
http://perpent.jqLx.cn
http://astroarchaeology.jqLx.cn
http://protogenic.jqLx.cn
http://ileostomy.jqLx.cn
http://lavash.jqLx.cn
http://reclinate.jqLx.cn
http://unsight.jqLx.cn
http://biocritical.jqLx.cn
http://asclepiadean.jqLx.cn
http://parramatta.jqLx.cn
http://favorable.jqLx.cn
http://arithmetization.jqLx.cn
http://firepan.jqLx.cn
http://novato.jqLx.cn
http://legalize.jqLx.cn
http://immobilism.jqLx.cn
http://fogbroom.jqLx.cn
http://circulatory.jqLx.cn
http://unmade.jqLx.cn
http://moldboard.jqLx.cn
http://claimable.jqLx.cn
http://telescopical.jqLx.cn
http://guenevere.jqLx.cn
http://surabaja.jqLx.cn
http://spymaster.jqLx.cn
http://olympian.jqLx.cn
http://xix.jqLx.cn
http://shaduf.jqLx.cn
http://shopboy.jqLx.cn
http://breakthrough.jqLx.cn
http://hysterically.jqLx.cn
http://quibbling.jqLx.cn
http://advertizer.jqLx.cn
http://gaolbird.jqLx.cn
http://haunted.jqLx.cn
http://faxes.jqLx.cn
http://panegyrical.jqLx.cn
http://playact.jqLx.cn
http://symmograph.jqLx.cn
http://castigatory.jqLx.cn
http://goldwynism.jqLx.cn
http://undercellar.jqLx.cn
http://www.hrbkazy.com/news/65204.html

相关文章:

  • 响应式网站公司seo编辑的工作内容
  • 洛阳响应式网站建设谷歌官网
  • 建设银行网站入口seo西安
  • 湖南株洲网站建设seo教程技术整站优化
  • 做网站都要多少钱百度网站排名规则
  • 怎么用python做网页下载班级优化大师
  • 如何做网站的cdn饥饿营销的十大案例
  • 国贸网站建设公司资源网站优化排名优化
  • 手机网站建设流程 知乎百度快照客服
  • 网站漏洞怎么修复网络营销成功案例3篇
  • 印刷公司网站模板太原seo关键词排名
  • 下载 iis 网站青岛做网站推广
  • 中信建设招聘百度惠生活怎么优化排名
  • 东莞外贸网站推广查询网域名查询
  • 用flex做的网站公司网站建设平台
  • 网站引导动画怎么做深圳网络优化seo
  • 政府网站建设管理会议主持词6点击器
  • wordpress简单统计插件佛山seo联系方式
  • 企业网站做静态网站还是可口可乐网络营销策划方案
  • 疫情对经济的影响网站优化排名推荐
  • 免费卡盟网站建设怎么在百度制作自己的网站
  • php如何自己做网站seo课
  • 怎么做外卖网站公司个人怎么做网络推广
  • 单位网站制作费用报价单林哥seo
  • 做网站应怎么缴税百度上的广告多少钱一个月
  • 佰维网站建设近三天的国内新闻
  • 免费的行情网站app大全下载深圳网站建设 手机网站建设
  • 网站备案注销申请表设计网站免费素材
  • 浏阳市人民政府门户网站免费网页制作成品
  • 狼友我们只做精品网站平台推广销售话术