C++中的范围解析算子问题 我学习C++,对范围解析操作符不太确定。 假设我有以下代码: 代码1:

C++中的范围解析算子问题 我学习C++,对范围解析操作符不太确定。 假设我有以下代码: 代码1:,c++,operators,resolution,C++,Operators,Resolution,代码2: class Student { int no; int semester; char grade[M+1]; public: void display() const{ cout << "Hi!" << endl; } }; 如果在其类中定义显示,有什么区别吗?如果没有区别,那么我为什么要使用范围解析运算符呢?有一个区别-如果在类中定义,函数的行为就好像它被声明为内联一样。但这没什么大不了的,

代码2:

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

如果在其类中定义显示,有什么区别吗?如果没有区别,那么我为什么要使用范围解析运算符呢?

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

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

通常,您会在头文件中定义类,然后在.cpp文件中实现它。为了让编译器知道哪个函数属于哪个类,可以使用作用域解析运算符,即::


当您将函数直接放在头中时,如示例2中所示,您需要在它前面加上inline关键字,这会告诉编译器将整个函数放在调用它的代码中。通常使用非常小的函数执行此操作,并且出于速度考虑,大量使用它可能会导致exe中的代码膨胀。

通常在头文件中定义类,然后在.cpp文件中实现它。为了让编译器知道哪个函数属于哪个类,可以使用作用域解析运算符,即::


当您将函数直接放在头中时,如示例2中所示,您需要在它前面加上inline关键字,这会告诉编译器将整个函数放在调用它的代码中。通常使用非常小的函数执行此操作,出于速度考虑,大量使用它可能会导致exe中的代码膨胀。

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

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

主要原因是你不想把课堂搞得乱七八糟 定义和各种不相关的实施细节, 类似于函数的实现。小班的时候,, 只有一两个功能,而且功能很小, 只有一两行,这不一定是个问题,但是 在现实生活中,将函数定义放入类中 它本身很快就会导致无法阅读的代码;你想留下来吗 外部定义与内部定义分开 尽可能多地实施。在大型项目中,他们将
通常由不同的人维护。

主要原因是您不想让类变得杂乱无章 定义和各种不相关的实施细节, 类似于函数的实现。小班的时候,, 只有一两个功能,而且功能很小, 只有一两行,这不一定是个问题,但是 在现实生活中,将函数定义放入类中 它本身很快就会导致无法阅读的代码;你想留下来吗 外部定义与内部定义分开 尽可能多地实施。在大型项目中,他们将
通常由不同的人维护。

如果第一个示例位于标题中,则需要内联声明函数定义;否则,如果您包含来自更多tha的标题,您将获得链接错误
n一个源文件。一旦你这样做了,它将完全等同于第二个例子;否则,如果包含来自多个源文件的头,则会出现链接错误。一旦你这样做了,它将完全等同于第二个例子。
class Student {
     int no;
     int semester;
     char grade[M+1];
 public:
     void display() const{
        cout << "Hi!" << endl;
    }
 };