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

#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) { }

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

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

10-11 03:01