第七章 7.6节练习

练习7.56

什么是类的静态成员?他有何有点?静态成员与普通成员有何区别?

解答:

【引用】与类本身直接相关的成员。


练习7.57

编写你自己的Account类。

解答:

参考书中实现吧。


练习7.58

下面的静态数据成员的声明和定义有错误吗?请解释原因。

// example.h
class Example{
public:
  static double rate = 6.5;
  static const int vecSize = 20;
  static vector<double> vec(vecSize);
};

//example,c
#include "example.h"
double Example::rate;
vector<double> Example::vec;

解答:

以下是clang3.4给出的错误提示,相较VS2013和gcc4.8.2的提示来说更好理解一些。

test.cc:8:19: error: non-const static data member must be initialized out of
      line
    static double rate = 6.3;
                  ^      ~~~
test.cc:10:35: error: unknown type name 'vecSize'
        static vector<double> vec(vecSize);
                                  ^
test.cc:14:21: error: definition or redeclaration of 'rate' not allowed inside a
      function
    double Example::rate;
           ~~~~~~~~~^
test.cc:15:31: error: definition or redeclaration of 'vec' not allowed inside a
      function
      vector<double> Example::vec;
                     ~~~~~~~~~^
当使用为rate添加const标识时,其会将const和double联系在一起,作为一个新的类型。

所以,这里rate需要在类外定义。


不大清楚这里为什么要输入类型名称。

不过,应该清楚怎么改。将但参数和括号去掉,在类外去定义这个成员。

(2014.12.03更新,这里要求输入一个类型,是因为C++将其解析为一个函数声明,所以让你输入类型以确定这是一个正确的函数声明。这就是一个名为“C++’s most vexing parse”(最令人头痛的语法解析)的东西, 有兴趣的同学可以去 http://en.wikipedia.org/wiki/Most_vexing_parse 或 http://qiezhuifeng.diandian.com/post/2012-08-27/40038339477 这里看看。)


在C文件中,重定义了类中的变量,所以会报错。


©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页