C++基础类布局

Spe*_*cer 4 c++ class

学习C++并看到如下所示的课程:

class CRectangle {
    int x, y;
  public:
    void set_values (int,int);
    int area () {return (x*y);}
};

void CRectangle::set_values (int a, int b) {
  x = a;
  y = b;
}
Run Code Online (Sandbox Code Playgroud)

我知道Java中的Java和方法(函数)是在类中编写的.该类看起来像Java接口.我知道我可以写这样的类:

class CRectangle {
    int x, y;
  public:
    void set_values (int a, int b) {
      x = a;
      y = b;
    };
    int area () {return (x*y);}
};
Run Code Online (Sandbox Code Playgroud)

但是有差异还是标准?

Did*_*set 8

有区别.当您在类定义中编写函数的定义时(情况2),则认为该函数已被声明inline.这是标准的C++.

用法,是在类定义中,在头文件(.h)中声明成员函数(Java方法),并在C++文件(.cpp,.cc或.C,...)中定义这些成员函数.减少编译时间,当您更改函数体时,只需编译C++文件,而如果更改​​头文件中的某些内容,则将编译包含此标题的所有C++文件.


Thi*_*ter 5

如果只在类定义中定义原型(属于头文件)并在cpp文件中实现方法,那就更清晰了.

当你有非常小的类时,在类定义中做所有事情可能听起来更容易,因为一切都在同一个地方,但是一旦你的类增长,任何使用它的开发人员会讨厌你,因为他会在方法原型之间使用你的代码看看找出的东西(不是每个人都使用IDE来显示所有可用的方法!).

但是,有一个例外:模板类方法需要在头文件中实现,因为它们需要针对模板的每个特化进行编译.