【发布时间】:2015-05-22 12:13:07
【问题描述】:
我很想知道为什么 C++ 中不允许跟随?
第一个节目:
#include <iostream>
class Test {
public:
int myfun();
}
virtual int Test::myfun()
{ return 0; }
int main()
{ }
[错误] 'virtual' 外部类声明
第二个程序:
#include <iostream>
class Test {
public:
int myfun();
};
static int myfun() {
std::cout<<"This program contains an error\n";
return 0;
}
int main() {
Test::myfun();
return 0;
}
[错误] 不能在没有对象的情况下调用成员函数'int Test::myfun()'
所以,我的问题是
为什么我不能像第一个程序一样使成员函数成为虚拟函数?
为什么我不能像在第二个程序中那样使成员函数静态?
有什么理由不允许这两个关键字出现在课堂之外?
【问题讨论】:
-
static绝对允许在类定义之外。但想想virtual的真正含义。 -
有理由允许这两个课外吗?你想达到什么目标?
-
@meet:第二个程序定义了第二个同名的非成员函数。由于您没有定义
Test::myfun,它将无法链接。 -
@Jarod42:这些示例尝试将修饰符添加到不在其声明中的定义中。
-
函数的定义必须与其声明相匹配,因此我不太明白你的意思。如果允许,您认为您会得到什么?