以下工作代码显示两个给定数字中较小的一个。
#include "stdafx.h"
#include <iostream>
using namespace std;
template <class T>
class Bucky {
public:
Bucky(T a, T b) {
first = a;
second = b;
}
T smaller() {
return (first<second?first:second);
}
private:
T first, second;
};
int main() {
Bucky <int>obj(69, 105);
cout << obj.smaller() << endl;
return 0;
}
我想 派生自类 'Bucky' 和 创建一个子类 具有 成员函数 显示“你好!”
请帮忙。
附言这是我创建子类的最佳失败尝试:
template <class T>
class mySubclass : public Bucky<T>
{
public:
mySubclass(T a, T b) { // error C2512: 'Bucky<T>' : no appropriate default constructor available
//first = a;
//second = b;
}
void greet() {
cout << "Hi there!";
}
};
最佳答案
当你构造一个派生类时,它也会构造它的基类。如果您没有明确指定这一点,它将尝试使用其默认构造函数(不带参数)构造基类。但是,您的基类没有默认构造函数。相反,您希望委托(delegate)给带有两个 Bucky
参数的 T
构造函数:
mySubclass(T a, T b)
: Bucky<T>(a, b) { }
如您所见,这使用了一种以
:
开头的奇怪语法,并将构造函数体留空。此语法是成员初始化列表。它表示我们通过将 Bucky<T>
和 a
传递给其构造函数来初始化 b
基类。事实上,你也应该在你的 Bucky
构造函数中使用它:Bucky(T a, T b)
: first(a), second(b) { }
这里我们分别用
first
和 second
初始化 a
和 b
成员。关于c++ - 创建类模板的子类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24539091/