我正在学习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) 所以我有以下课程:
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) 我的教科书具有以下用于从链接列表中删除元素的代码.
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)