C++类的方法设计(二)

2014-11-24 11:38:04 · 作者: · 浏览: 1
明默认构造函数和所有参数都有默认值得构造函数编译器会报错。因为二者的等效性,当不提供任何参数数,编译器不晓得调用哪个构造函数了。

--------------------------------------------------------------------

五、内联方法

C++中提供这样一种能力,函数或者方法的调用可以不以生成代码的方法实现,就像调用独立的代码块,编译器会将方法体或者函数体直接插入到调用方法或者函数的位置,俗称函数体替换,就像我们的宏函数一样。这个过程成为内联。具有这一行为的函数或方法成为内联方法或函数。内联比使用#define宏要安全。具体实现是在方法或者函数定义前使用inline关键字将它们指定为内联的。例如:

inline double MyClass::get_value() const
{
    num_accesses++;
    return value;
}
inline string MyClass::get_string() const
{
    num_accesses++;
    return string_;
}
这样编译器就可选择用实际的方法体替换get_value以及get_string的调用,而不是生成代码通过函数调用。

值得注意的问题是:如果没有看到函数的定义,编译器怎么替换函数体?因此编写内联函数或者方法时,应该将定义与原型一起放在头文件中。

C++提供另外一种声明内联方法的语法,而无需使用inline关键字,而是直接将方法定义放在类的定义中。比如:

class MyClass()
{  
    public:
          //......
         double get_value() const{ num_access++;return value_;}
         string get_string() const{ num_access++;return string_;}
         //......
};
内联方法的应用受限,编译器只会内联最简单的方法以及函数,如果将编译器不想内联的方法定义为内联,编译器会自动忽略,其次,内联使得代码膨胀,在每个调用的地方都会重新生成方法体,这会增加可执行程序的大小。