С++ для начинающих




Статические функции-члены - часть 2


#include "account.h"

bool limitTest( double limit )

{

   // пока еще ни одного объекта класса Account не объявлено

   // правильно: вызов статической функции-члена

   return limit <= Account::interest() ;

}

int main() {

   double limit = 0.05;

   if ( limitTest( limit ) )

   {

      // указатель на статическую функцию-член

      // объявлен как обычный указатель

      void (*psf)(double) = &Account::raiseInterest;

      psf( 0.0025 );

   }

   Account ac1( 5000, "Asterix" );

   Account ac2( 10000, "Obelix" );

   if ( compareRevenue( ac1, &ac2 ) > 0 )

      cout << ac1.owner()

           << " is richer than "

           << ac2.owner() << "\n";

   else

      cout << ac1.owner()

           << " is poorer than "

           << ac2.owner() << "\n";

   return 0;

}

Упражнение 13.8

Пусть дан класс Y с двумя статическими данными-членами и двумя статическими функциями-членами:

class X {

public:

   X( int i ) { _val = i; }

   int val() { return _val; }

private:

   int _val;

};

class Y {

public:

   Y( int i );

   static X xval();

   static int callsXval();

private:

   static X _xval;

   static int _callsXval;

};

Инициализируйте _xval значением 20, а _callsXval значением 0.

Упражнение 13.9

Используя классы из упражнения 13.8, реализуйте обе статические функции-члена для класса Y. callsXval() должна подсчитывать, сколько раз вызывалась xval().

Упражнение 13.10

Какие из следующих объявлений и определений статических членов ошибочны? Почему?

// 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;




Содержание  Назад  Вперед