首页 > 代码库 > c++调用基类的构造函数(模板类)
c++调用基类的构造函数(模板类)
代码如下
#include <stdlib.h> #include <stdio.h> #include <iostream> using namespace std; template<class T> class Base { public: Base(T name); virtual void toString(); protected: T id; }; template<class T> Base<T>::Base(T n) { printf("Base constructor!\n"); id = n; } template<class T> void Base<T>::toString() { cout<<"my id is "<<id<<endl; } template<class T> class Derive:public Base<T> { public: Derive(T id); }; template<class T> Derive<T>::Derive(T n):Base<T>(n) { printf("Derive constructor!\n"); } int main(void) { Derive<int> d(5); d.toString(); return 0; }
需要注意的是,派生类调用基类的构造函数是Base<T>(n)这样子的,要加上模板参数,不然会编译错误。
如果没有模板参数T,出现的错误是
../src/CTest.cpp: 在构造函数‘Derive<T>::Derive(T)’中: ../src/CTest.cpp:41:24: 错误: 类‘Derive<T>’没有名为‘Base’的字段 ../src/CTest.cpp: In instantiation of ‘Derive<T>::Derive(T) [with T = int]’: ../src/CTest.cpp:49:17: required from here ../src/CTest.cpp:41:30: 错误: 对‘Base<int>::Base()’的调用没有匹配的函数 ../src/CTest.cpp:41:30: 附注: 备选是: ../src/CTest.cpp:21:1: 附注: Base<T>::Base(T) [with T = int] ../src/CTest.cpp:21:1: 附注: 备选需要 1 实参,但提供了 0 个 ../src/CTest.cpp:11:7: 附注: Base<int>::Base(const Base<int>&) ../src/CTest.cpp:11:7: 附注: 备选需要 1 实参,但提供了 0 个 make: *** [src/CTest.o] 错误 1
c++调用基类的构造函数(模板类)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。