空虚函数:好的做法?

Empty virtual function: good practice?

我有一个超级class 学生,Junior class 和 Senior class 继承。

virtual void student::attend(void){
        //call either Junior's or Senior's attend
        //if attend is called on a Student object, do nothing.
}
 void Junior::attend(void){
    //do stuff
}
 void Senior::attend(void){
  //do stuff
}

基本上我在 superclass 中的虚方法现在是空的,它所做的只是调用正确的 Senior 或 Junior attend()。如果在 Student 对象上调用该对象,我不希望发生任何事情。 我正在研究这个的原因是,我想要类似 std::vector <student*> studv 的东西,其中 studv 将包含指向 Senior 和 Junior 的指针,并在向量的每个对象上调用 attend() 而无需指定任何内容.所以,我有两个问题:

a) 这被认为是好的做法吗?有更好的选择吗? b) 考虑到我的一个继承了 superclass 的 classes 可能永远不会使用其功能之一,我该怎么办?我应该在派生 class 中删除它,还是什么都不做?

非常感谢!

真正的问题是 student 对象是否会自己创建(相对于作为 JuniorSenior 的子对象)。如果它不会被创建,考虑声明一个对 student 什么都不做的函数是纯虚拟的:

virtual void attend() = 0;

那么你将不能自己创建一个student对象——如果你尝试,你会得到一个编译器错误——而且,它是自己的-记录那个事实,你也不必提供一个空的实现。几个好处。