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

阿里云怎么做淘宝客网站常用的html编辑器有哪些

阿里云怎么做淘宝客网站,常用的html编辑器有哪些,怎样开网站卖东西,怎样做问卷网站C最重要的特性之一就是代码重用#xff0c;为了实现代码重用#xff0c;代码必须具有通用性。通用代码应不受数据类型的影响#xff0c;并且可以自动适应数据类型的变化。这种程序设计类型称为参数化程序设计。模板是C支持参数化程序设计的工具#xff0c;通过它可以实现参…C最重要的特性之一就是代码重用为了实现代码重用代码必须具有通用性。通用代码应不受数据类型的影响并且可以自动适应数据类型的变化。这种程序设计类型称为参数化程序设计。模板是C支持参数化程序设计的工具通过它可以实现参数化多态性。所谓参数化多态性就是将程序所处理的对象的类型参数化使得一段程序可以用于处理多种不同类型的对象。 1.函数模板 通过函数重载可以看出重载函数通常是对于不同的数据类型完成类似的操作。很多情况下一个算法是可以处理多种数据类型的。但是用函数实现算法时即使设计为重载函数也只是使用相同的函数名函数体仍然要分别定义。 下面是两个求绝对值的函数 int abs(int x) {return x 0 ? -x : x; }double abs(double x) {return x 0 ? -x : x; }这两个函数只有参数类型和返回类型不同功能完全一样。类似这样的情况我们需要写一段通用的代码是用于多种不同的数据类型这样会使代码的可重用性大大提高从而提高软件的开发效率。使用函数模板就是为了达到这一目的。程序员只对函数模板编写一次然后基于调用函数时提供的参数类型C编译器将自动产生相应的函数来正确地处理该类型的数据。 1函数模板的定义形式为 template 模板参数表 类型名 函数名(参数表) {函数体定义 }所有函数模板的定义都是用关键字template开始的该关键字之后是用尖括号括起来的“模板参数表”。模板参数表由用逗号隔开的模板参数构成可以包括以下内容 ①class或typedef标识符指明可以接收一个类型参数。这些类型参数代表的是类型可以是内部类型或者自定义类型。 ②“类型说明符”标识符指明可以接收一个由“类型说明符”所规定类型的常量作为参数。 ③template参数表class标识符指明可以接收一个类模板名作为参数。 类型参数可以用来指定函数模板本身的形参类型、返回值类型以及声明函数中的局部变量。函数模板中函数体的定义方式与定义普通函数类似。 【例1】求绝对值的函数模板 templateclass T T abs(T x) {return x 0 ? -x : x; } int main() {int n -5;cout abs(n) endl;double m -6.8;cout abs(m) endl;return 0; }运行结果 分析 ①在上述主函数中调用abs()时编译器从实参的类型推导出函数模板的类型参数。 ②当类型参数的含义确定后编译器将以函数模板为样板生成一个函数这一过程称为函数模板的实例化。 例如对于调用表达式abs(n)由于实参n是int类型所以推导出函数模板中类型参数T为int接着编译器以函数模板为样板生成如下函数该函数为函数模板abs的一个实例 int abs(int x) {return x 0 ? -x : x; }同样对于调用表达式abs(m)由于实参m是double型所以推导出函数模板中类型参数T为double接着编译器以函数模板为样板生成如下函数 double abs(double x) {return x 0 ? -x : x; }③因此当主函数第一次调用abs时执行的实际上是由函数模板生成的函数int abs(int x);主函数第二次调用abs时执行的实际上是由函数模板生成的函数double abs(double x);。 【例2】函数模板示例 templateclass T void outputA(const T* arr, int n) {for (int i 0;i n; i){cout arr[i] ;}cout endl; }int main() {const int A_n 5;const int B_n 6;const int C_n 7;int arr[A_n] { 1,2,3,4,5 };cout 输出数组arr的内容: ;outputA(arr, A_n);double brr[B_n] { 1.1,2.2,3.3,4.4,5.5,6.6 };cout 输出数组brr的内容: ;outputA(brr, B_n);char crr[C_n] Hi yyn;cout 输出数组crr的内容: ;outputA(crr, C_n);return 0; }运行结果 分析 函数模板中声明了类型参数T表示一种抽象的类型。当编译器检测到程序中调用函数模板outputA时便用outputA的第一个实参的类型替换掉整个模板定义中的T并建立用来输出指定类型数组的一个完整的函数然后再编译这个新建的函数。 主函数中声明了3中不同类型的数组int型数组arrdouble型数组brr和char型数组crr长度分别为567。然后调用函数模板生成相应的函数最后在屏幕上输出每个数组。编译过程中针对3种数据类型生成的函数如下 outputA(a,A_n);//适用于int类型的outputA模板函数 outputA(b,B_n);//适用于double类型的outputA模板函数 outputA(c,C_n);//适用于char类型的outputA模板函数由上例可以看出模板函数与重载密切相关。从函数模板产生的相关函数都是同名的编译器用重载的方法调用相应的函数。另外函数模板本身也可以用多种方法重载。 2模板函数的使用形式和函数的本质区别 ①函数模板本身在编译时不会生成任何目标代码只有由模板生成的实例会生成目标代码。 ②被多个源文件引用的函数模板应当连同函数体一同放在头文件中而不能像普通函数那样只将声明放在头文件中。 ③函数指针也只能指向函数模板的实例而不能指向函数模板本身。 2.类模板 使用类模板使用户可以为类定义一种模式使得类中的某些数据成员、某些成员函数的参数、返回值或局部变量能取任意类型包括系统预定义的和用户自定义的。 类是对一组对象的公共性质的抽象而类模板则是对不同类的公共性质的抽象因此类模板是属于更高层次的抽象。由于类模板需要一种或多种类型参数所以类模板也常常称为参数化类。 vector就是一个类模板用vector创建的动态数组都是类模板的对象。 1类模板声明的语法形式 template模板参数表 class 类名 {类成员声明; };其中类成员的声明方法和普通类的定义几乎相同只是它的各个成员数据成员和函数成员中通常要用到模板的类型参数T。其中“模板参数表”的形式与函数模板中的“模板参数表”相同。 如果需要在类模板以外定义其成员函数则要采用以下的形式 template模板参数表 类型名 类名模板参数标识符列表::函数名(参数表)一个类模板声明其自身并不是一个类它说明了类的一个家族只有被其他代码引用时类模板才根据引用的需要生成具体的类。类模板的实例化过程在程序中时隐藏的。 使用一个类模板建立对象时应以如下形式声明 模板名模板参数表对象名1,...,对象名n;【例】类模板应用举例 在本例中声明一个实现任意类型数据存取的类模板S然后通过具体数据类型参数对类模板进行实例化生成类然后类在被实例化生成对象s1s2s3和d。 struct student//结构体student {int id;//学号float avg;//平均分 };templateclass T//类模板实现对任意类型数据进行存取 class S { private:T item;//用于存放任意类型的数据bool Isvalue;//标记item是否被存入 public:S();//默认构造函数T getE();//提取数据函数void putE(const T x);//存入数据函数 };templateclass T//默认构造函数的实现 ST::S():Isvalue(false){}templateclass T//提取数据函数的实现 TST::getE() { if (!Isvalue)//如果提取的是没有初始化的数据则程序终止{cout 数据不存在 endl;exit(1);//使程序完全退出返回到操作系统//参数可用来表示程序终止的原因可以被操作系统接收}elsereturn item;//返回item中存放的数据 }templateclass T//存入函数的实现 void ST::putE(const T x) {Isvalue true;//将Isvalue设置为true表示item中已存入数值item x;//将x的值存入item }int main() {Sints1, s2;//定义两个Sint类对象s1和s2其中数据成员item为int型s1.putE(3);//向对象s1中存入数据初始化对象s1为3s2.putE(-7);//向对象s2中存入数据初始化对象s1为-7cout s1.getE() s2.getE() endl;//输出对象s1和s2的数据成员student g { 1000,23 };//定义student类型结构体变量的同时赋予初值Sstudents3;//定义Sstudent类对象s3其中数据成员item为student类型s3.putE(g);//向对象s3中存入数据初始化对象s3cout 这个学生的id是 s3.getE().id endl;//输出对象s3的数据成员Sdoubled;//定义Sdouble类对象d其中数据成员item为double类型cout 检索对象d;cout d.getE() endl;//输出对象d的数据成员//由于对象d未经初始化,在执行函数d.getE()过程中导致程序终止return 0; }运行结果
http://wiki.neutronadmin.com/news/170472/

相关文章:

  • 湖南做网站磐石网络电子商务网站页面设计图片
  • 怎么样做美术招生信息网站那个网站做淘宝推广比较好
  • OA 公司网站 铁道建设报12366纳税服务平台
  • 凡科建设网站股权分配系统建设网站
  • 手机网站开发流程.咨询公司的经营范围有哪些
  • 网站建设比较好的智能手机app开发
  • 中国做国际期货最大的网站网站建设有关书籍
  • 德育工作网站建设方案江苏百度推广代理商
  • 网站为什么被降权杭州vi设计策划
  • 高端建设网站公司哪家好收到网站打入0.1元怎么做分录
  • 网站建设流程表wordpress搬家修改域名
  • 郑州网站建设动态松江品划网络做网站
  • 网站开发案例pdf微网站建设目的
  • 网站建设网络推广方案前端开发人员
  • 酷 网站模板做小程序的公司有哪些比较好?
  • 哪个网站可以做微商宜昌做网站的
  • 求一个做交通分析的底图网站网站链接跳转如何做
  • 高端的网站邹平网站设计
  • 什么网站上面能接点小活做湖北 商城网站建设
  • 东莞网站的制作做网站来联盟怎么样
  • 佛山市外贸网站建设校园微网站建设方案ppt模板
  • 网上做效果图网站有哪些网站跟域名是什么关系
  • 百度推广文案seo公司系统
  • 残疾人网站服务平台wordpress用网站测速
  • 云南建设企业网站智慧团建怎么转团关系
  • 男女直接做的视频网站一份完整的活动策划
  • 新注册公司网站建设网站在哪里设置关键词
  • 怎样自己做qq网站网络开发理论
  • 创建网站的各项费用wordpress 提交
  • 小型企业的网站建设论文wordpress 最近访客