关于C ++中的范围解析运算符的问题?

时间:2011-05-05 10:21:59

标签: c++ operators resolution

我正在学习C ++而不太确定范围解析运算符。 假设我有以下代码: 代码1:

class Student {
     int no;
     int semester;
     char grade[M+1];
 public:
     void display() const;
 };

 void Student::display() const {
     cout << "Hi!" << endl;
 }

代码2:

class Student {
     int no;
     int semester;
     char grade[M+1];
 public:
     void display() const{
        cout << "Hi!" << endl;
    }
 };

如果我在其类中定义display(),会有什么不同吗?如果没有区别,那我为什么要使用范围解析运算符?

4 个答案:

答案 0 :(得分:6)

有一个区别 - 如果在类中定义,则函数的行为就像声明为inline一样。但这没什么大不了的,编译器可能会忽略它。最大的区别在于,对于大型多文件项目,如果对标头中定义的函数体进行更改,则必须重新编译使用标头的其他任何文件。然而,如果对.cpp文件中定义的函数体进行更改,则只需要重新编译该文件。这可以而且确实对现实世界的项目产生巨大影响。

答案 1 :(得分:1)

范围解析运算符允许您在类外定义函数 这使您能够从库的用户 不公开/抽象 您的源代码实现。类声明放在头文件中,实际定义保存在cpp文件中,然后只向最终用户提供相同的目标文件或库。
你可以说它提供了一种保护知识产权的方法,尽管这个功能不是专门为它设计的。

答案 2 :(得分:0)

通常,您将在头文件中定义类,然后在.cpp文件中实现它。要使编译器知道哪个函数属于哪个类,请使用范围解析运算符,即::

当您将函数直接放在标题中时,如示例二中所示,您需要在其前面添加inline关键字,该关键字告诉编译器将整个函数放在您调用它的代码中。通常,您使用非常小的函数执行此操作并考虑速度,使用它可能会导致代码膨胀。

答案 3 :(得分:0)

主要原因是你不想让课堂变得杂乱无章 定义各种不相关的实现细节, 喜欢实现一个功能。当班级很小的时候, 只有一个或两个功能,功能很小, 只有一两行,它不一定是个问题,但是 在现实生活中,将函数定义放在类中 本身很快导致代码难以理解;你想保留 外部定义与内部定义分开 尽可能地实施。 (在大型项目上,他们会 通常由不同的人维护。)