回响_ 发表于 2024-2-5 08:50:36

C++快速入门--P46类模板--课上代码

#include <iostream>
#include <string>

template <class T>
class Stack
{
public:
        Stack(unsigned int size = 100);
        ~Stack();
        void push(T value);
        T pop();
       
private:
        unsigned int size;
        unsigned int sp;
        T *data;
};

template <class T>
Stack<T>::Stack(unsigned int size)
{
        this -> size = size;
        data = new T;
        sp = 0;
}

template <class T>
Stack<T>::~Stack()
{
        delete []data;
}

template <class T>
void Stack<T>::push(T value)
{
        data = value;
       
}

template <class T>
T Stack<T>::pop()
{
        return data[--sp];
}

int main()
{
        Stack<int> intStack(10);
       
        intStack.push(1);
        intStack.push(2);
        intStack.push(3);
       
        std::cout << intStack.pop() << "\n";
        std::cout << intStack.pop() << "\n";
        std::cout << intStack.pop() << "\n";
       
        return 0;
}

FishC 发表于 2024-2-5 08:50:55

这段代码的功能是实现一个栈类模板(Stack),可以存储任意类型的数据。

首先,我们定义了一个类模板Stack,它有三个成员函数和三个私有成员变量。构造函数Stack(unsigned int size = 100)用于创建一个大小为size的栈对象,默认大小为100。析构函数~Stack()用于释放动态分配的内存。成员函数push(T value)用于将一个值压入栈中。成员函数pop()用于弹出栈顶的值。

然后,我们定义了构造函数、析构函数和成员函数的实现。需要注意的是,在类模板的成员函数外部实现时,需要使用template关键字告诉编译器这是一个类模板的成员函数。

接下来,在main函数中,我们创建了一个Stack对象intStack,并设置大小为10。然后,连续调用push函数将1、2和3压入栈中。

根据代码的逻辑,我们可以看出这是一个有错误的代码示例:

1. 构造函数中,应该使用数组形式的new来分配动态内存,即data = new T。而不是单个元素的new,即data = new T。

2. push函数中,我们应该将新的值存储到栈中的下一个位置上,而不是覆盖掉之前存储的值。

3. pop函数中,应该返回栈顶元素,并将栈顶指针sp减1。而不是直接返回data。

下面是修正后的代码:

#include
#include

template
class Stack
{
public:
    Stack(unsigned int size = 100);
    ~Stack();
    void push(T value);
    T pop();

private:
    unsigned int size;
    unsigned int sp;
    T *data;
};

template
Stack::Stack(unsigned int size)
{
    this->size = size;
    data = new T;
    sp = 0;
}

template
Stack::~Stack()
{
    delete[] data;
}

template
void Stack::push(T value)
{
    data = value;
    sp++;
}

template
T Stack::pop()
{
    if (sp == 0) {
      throw "Stack is empty";
    }
    sp--;
    return data;
}

int main()
{
    Stack<int> intStack(10);
   
    intStack.push(1);
    intStack.push(2);
    intStack.push(3);
   
    std::cout << intStack.pop() << std::endl; // 输出3
    std::cout << intStack.pop() << std::endl; // 输出2
    std::cout << intStack.pop() << std::endl; // 输出1
   
    return 0;
}

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: C++快速入门--P46类模板--课上代码