⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch5.4.cc

📁 C++ source code for book-C++ and Object Oriented Numeric computing for scientists and engineers
💻 CC
字号:
#include <cmath>
#include <iostream>

class Vec {
private:
  int size;
  double* entry;
  static Vec defaultVec;                  // variable for holding default vector
public:
  Vec(int sz = 0, double* et = 0);
  Vec(const Vec&);
  Vec& operator=(const Vec&);
  static void setDefault(int, double*);   // function for setting default vector

  void print() {
    for (int i = 0; i < size; i++) std::cout  << entry[i] << " ";
    std::cout  << std::endl;
  }
};

Vec::Vec(int sz, double* et) {
  size = (sz ? sz: defaultVec.size);      // if sz = 0 use default size
  entry = new double [size];
  if (et == 0) {                          // if et is null pointer, use default
    for (int i = 0; i < size; i++)
      entry[i] = defaultVec.entry[i];
  } else {
    for (int i = 0; i < size; i++) entry[i] = et[i];
  }
}

inline Vec::Vec(const Vec& v) {
  entry = new double [size = v.size];
  for (int i = 0; i < size; i++) entry[i] = v.entry[i];
}

Vec& Vec::operator=(const Vec& v) {
  if (this != &v) {
    if (size != v.size){
      delete[] entry;
      entry = new double [size = v.size];
    }
    for (int i = 0; i < size; i++) entry[i] = v.entry[i];
  }
  return *this;
}

double et[] = {5, 6, 7, 8, 9};
Vec Vec::defaultVec(5,et);           // defaultVec initialized by et of size 5

void Vec::setDefault(int sz, double* et) {       // reset default vector
  Vec::defaultVec = Vec(sz,et);      // note class qualification Vec::defaultVec
}

void f() {
  Vec a;                             // a is default vector of 5
  Vec b(3);                          // b is default vector of 3
  a.print();
  b.print();

  double* ey = new double [8];
  for (int i = 0; i < 8; i++ ) ey[i] = 1;
  Vec::setDefault(8,ey);             // reset defaultVec to be unit of size 8

  Vec a2;                            // a2 is new default unit vector of size 8
  Vec b2(5);                         // b2 is new default unit vector of size 5
  a2.print();
  b2.print();

  double* enb = new double [9];
  for (int i = 0; i < 9; i++ ) enb[i] = 8*i*i + 100;  
  Vec c(9,enb);                      // c is a vector constructed from enb.
  c.print();
}


int main() {
  f();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -