小编Sar*_*ski的帖子

c ++ virtual keyword vs overriding function

我正在学习c ++并且正在学习虚拟关键字.我已经在互联网上搜索,试图理解它无济于事.我进入我的编辑器并进行了以下实验,期望它打印出基本消息两次(因为我的印象是需要使用virtual关键字来覆盖函数).但是,它打印出两个不同的消息.有人可以向我解释为什么我们需要虚拟关键字,如果我们可以简单地覆盖函数并且看起来仍然看似多态行为?也许有人可以帮助我和其他人在未来理解虚拟与压倒一切.(我得到的输出是"我是基础",然后是"我是派生的").

#include <iostream>

using namespace std;
class Base{
public:
    void printMe(){
        cout << "I am the base" << endl;
    }
};
class Derived: public Base{
public:
    void printMe(){
        cout << "I am the derived" << endl;
    }
};
int main() {
    Base a;
    Derived b;
    a.printMe();
    b.printMe();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism virtual overriding

8
推荐指数
3
解决办法
1840
查看次数

将值插入链表前面并返回类对象

所以我有以下课程:

template <class T>
class List : public ContainerIfc <T> {
public:
    List();
    ~ List();
    List(const List&);
    List <T>& operator = (List&);
    List <T>& pushFront(T);
    List <T>& pushBack(T);
    List <T>& popFront(T&);
    List <T>& popBack(T&);
    int getSize();
    bool isEmpty();
    T front();
    T back();
    T& operator [](int);
private:
    Node<T> *head;
};
Run Code Online (Sandbox Code Playgroud)

和以下节点:

template <class T>
class Node {
public:
    T data;
    Node<T> *next;
    Node(T e) {
        data = e;
        next = NULL;
    }
};
Run Code Online (Sandbox Code Playgroud)

我想编写一个pushFront函数,它将值添加到链表的前面.我已经有了以下代码.我无法弄清楚的是如何让它返回一个List对象.我认为我的函数可以正常工作,它只是不会返回List.关于如何做到这一点的任何想法?

template <class T>
List <T>& List<T>::pushFront(T n){ …
Run Code Online (Sandbox Code Playgroud)

c++ class linked-list

1
推荐指数
1
解决办法
338
查看次数

从链接列表中删除值/删除未动态分配的值

我的教科书具有以下用于从链接列表中删除元素的代码.

void remove(double num)
{
    Node *cur, *prev;
    if(!head){
        return;
    }
    if(head->data == num)
    {
        cur = head;
        head = head->next;
        delete cur;
    }
    else{
        cur = head;
        while(cur!=NULL && cur->data != num)
        {
            prev = cur;
            cur= cur->next;
        }
        if(cur)
        {
            prev->next = cur->next;
            delete cur;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我对这段代码有几个问题.首先,如何删除未动态分配的值?为什么这有必要?我没有在任何地方看到新的声明.第二,为什么这段代码是必要的?为什么它需要在if语句中?

if(cur)
        {
            prev->next = cur->next;
            delete cur;
        }
Run Code Online (Sandbox Code Playgroud)

c++ linked-list dynamic-memory-allocation

1
推荐指数
1
解决办法
39
查看次数