100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 【无标题】类模板定义实例化

【无标题】类模板定义实例化

时间:2022-03-26 20:15:35

相关推荐

【无标题】类模板定义实例化

类模板详解\n类模板的定义及实例化\ntemplate\u003Cclass 模板参数>\nclass 类名 {\n // 类定义\n};\n\ntemplate\u003Ctypename 模板参数>\nclass 类名 {\n // 类定义\n};\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n其中: template是声明类模板的关键字,表示声明一个模板,模板参数可以是argv)\n{\n Graphics\u003Cchar>* sc; // 声明一个类模板指针,不需要实例化\n\n func(*sc); // 需要实例化,传递给函数func的是一个Graphics\u003Cchar>对象\n\n auto iobj = sizeof(Graphics\u003Cstd::string>); // 需要实例化,因为sizeof会计算Graphics\u003Cstring>对象的大小,\n // 为了计算大小,编译器必须根据类模板定义产生该类型。\n return 0;\n}\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n类模板的成员函数\n类模板的成员函数可以在类模板的定义中定义(inline函数),也可以在类模板定义之外定义(此时成员函数定义前面必须加上template及模板参数)\n类模板成员函数本身也是一个模板,类模板被实例化时它并不自动被实例化,只有当它被调用或取地址,才被实例化\n类中的虚函数不能用类型参数模板\ntemplate \u003Ctypename T>\nclass Graphics {\npublic:\n Graphics() {}\n // 成员函数定义在类模板的定义中\n void print() {}\n\n // 类中的虚函数不能用类型参数模板\n // template \u003Ctypename U>\n // virtual void func(U value) {\n // \n // }\nprivate:\n T m_value;\n};\n\n// 成员函数定义在类模板定义之外\ntemplate \u003Ctypename T>\nvoid Graphics\u003CT>::print()\n{\n}\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n普通类的成员函数模板\n#include \u003Ciostream>\n// 普通类\nclass MyTest {\npublic:\n // 成员函数模板\n template \u003Ctypename U>\n void func(U val)\n {\n std::cout \u003C\u003C \"type=\" \u003C\u003C typeid(val).name() \u003C\u003C \" value:\" \u003C\u003C val \u003C\u003C std::endl;\n }\n};\n\nint main()\n{\n MyTest test;\n test.func(100); // 普通类的成员函数模板:自动类型推导为int\n test.func(10.0);// 普通类的成员函数模板:自动类型推导为double\n return 0;\n}\n// 输出\n// type=i value:100\n// type=d value:10\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n类模板的成员函数模板\n#include \u003Ciostream>\n\n// 类模板\ntemplate \u003Ctypename T>\nclass MyTest {\npublic:\n MyTest(T val) : m_val(val) {}\n // 普通成员函数\n void print()\n {\n std::cout \u003C\u003C \"print() type=\" \u003C\u003C typeid(m_val).name() \u003C\u003C \" m_val:\" \u003C\u003C m_val \u003C\u003C std::endl;\n }\n // 成员函数模板\n template \u003Ctypename U>\n void func(U val)\n {\n std::cout \u003C\u003C \"template type=\" \u003C\u003C typeid(val).name() \u003C\u003C \" value:\" \u003C\u003C val \u003C\u003C std::endl;\n }\n\nprivate:\n T m_val;\n};\n\nint main()\n{\n MyTest\u003Cint> test(100); // 类模板实例化,显示指定类型T-> int\n test.print();\n test.func(10.0); // 类模板的成员函数模板,自动推导出U-> double\n\n MyTest\u003Cdouble> test1(100.0); // 类模板实例化,显示指定类型T-> double\n test1.print();\n test1.func(10); // 类模板的成员函数模板,自动推导出U-> int\n\n return 0;\n}\n// 输出\n// print() type=i m_val:100\n// template type=d value:10\n// print() type=d m_val:100\n// template type=i value:10\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n拷贝构造函数模板与拷贝赋值运算符模板\ntemplate \u003Ctypename T>\nclass MyTest {\n public:\n // 构造函数模板\n template \u003Ctypename U>\n MyTest(U value)\n {\n std::cout \u003C\u003C \"类模板泛化\" \u003C\u003C std::endl;\n }\n // 拷贝构造函数模板\n template \u003Ctypename T1>\n MyTest(const MyTest\u003CT1>& other)\n {\n std::cout \u003C\u003C \"拷贝构造函数模板\" \u003C\u003C std::endl;\n }\n // 拷贝赋值运算符模板\n template \u003Ctypename T2>\n MyTest\u003CT> & operator=(const MyTest\u003CT2>& other)\n {\n std::cout \u003C\u003C \"拷贝赋值运算符模板\" \u003C\u003C std::endl;\n }\n // 成员函数模板\n template \u003Ctypename V>\n void func(V param)\n {\n std::cout \u003C\u003C \"func param\" \u003C\u003C param \u003C\u003C std::endl;\n }\n\n Tm_value1;\n static int m_static_value; // 静态成员变量\n};\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n类模板特例化\n类模板的特化分为全特化与偏特化两种方式\n全特化:对于全特化,类的所有参数都与模板类的所有参数一一对应\n\n普通成员函数全特化\n静态成员变量全特化\ntemplate \u003Ctypename T, typename U>\nstruct MyTest\n{\n MyTest()\n {\n std::cout \u003C\u003C \"类模板泛化\" \u003C\u003C std::endl;\n }\n\n void func()\n {\n std::cout \u003C\u003C \"func函数泛化\" \u003C\u003C std::endl;\n }\n static int m_value;// 静态成员变量\n};\n\n// 普通成员函数全特化\ntemplate \u003C>\nvoid MyTest\u003Cint, double>::func()\n{\n std::cout \u003C\u003C \"func全特化\" \u003C\u003C std::endl;\n}\n\ntemplate\u003Ctypename T, typename U>\nint MyTest\u003CT, U>::m_value = 10;\n\n// 静态成员函数全特化\ntemplate\u003Ctypename T, typena

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
类模板实例化问题

类模板实例化问题

2023-02-06

C++模板类实例化

C++模板类实例化

2020-11-07

C++类模板实例化

C++类模板实例化

2024-06-08

C++类模板实例化条件

C++类模板实例化条件

2019-04-27