gpt4 book ai didi

c++ - 创建类模板的子类

转载 作者:太空狗 更新时间:2023-10-29 19:58:12 25 4
gpt4 key购买 nike

以下工作代码显示两个给定数字中较小的一个。

#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”类创建一个子类,它有一个显示“Hi There!”的成员函数

请帮忙。

附言这是我创建子类的最失败尝试:

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>通过传递基类 ab给它的构造函数。事实上,您也应该将此用于您的 Bucky构造函数:

Bucky(T a, T b)
: first(a), second(b) { }

这里我们正在初始化 firstsecond成员 ab分别。

关于c++ - 创建类模板的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24539091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com