是否没有必要定义类成员函数?

时间:2010-07-19 17:50:47

标签: c++

以下代码编译并运行完美,

#include <iostream>

class sam {
    public:
        void func1();
        int func2();
};

int main() {
    sam s;
}

是否因缺少类成员定义而产生错误?

5 个答案:

答案 0 :(得分:8)

如果不调用成员函数,则不必定义它们。即使你调用它们,编译器也不会抱怨,因为它们可以在其他编译单元中定义。只有链接器才会抱怨。不定义函数是被接受和共同的,以强制出现意外行为的错误(例如,用于防止复制)。

答案 1 :(得分:4)

是的,如果没有使用类成员函数,则完全有效。对于非成员函数也是如此。但是,虚拟功能需要定义。但是,如果不使用纯虚拟,则可以省略定义。

“已使用”,顺便说一句,不包括引用sizeof中的功能。换句话说,这仍然有效:

sizeof (s.func2()); // still not used!

答案 2 :(得分:2)

您可以在别处定义它(如另一个文件)

void Sam::func1()
{
    // do stuff here
}

答案 3 :(得分:1)

答案 4 :(得分:0)

确定了声明了它。你只是没有添加实现提供了一个函数原型。如果您没有函数定义,链接器可能会显示警告(例如,Borland C ++ Builder 5没有)。