C++ Primer Plus学习:第九章 内存模型和名称空间(2)

来源:互联网 发布:焊接机器人的软件功能 编辑:程序博客网 时间:2024/05/16 05:34
new
  new操作符
  布局new操作符

  eg

#include <iostream>#include <new>using namespace std;const int BUF = 512;const int N = 5;char buffer[BUF];int main(){    double *pd1,*pd2;    int i;    cout<<"Calling new and placement new:\n";    pd1 = new double[N];    pd2 = new (buffer) double[N];    for(i = 0;i<N;i++)          pd2[i] = pd1[i] = 1000+20.0*i;    cout<<"Buffer addresses:\n"<<" heap: "<<pd1<<" static: "<<(void *)buffer<<endl;    cout<<"Buffer contents:\n";    for(i = 0;i<N;i++)    {          cout<<pd1[i]<<" at "<<&pd1[i]<<"; ";          cout<<pd2[i]<<" at "<<&pd2[i]<<endl;          }                        cout<<"\nCalling new and placement new a second time:\n";    double *pd3,*pd4;    pd3 = new double[N];    pd4 = new (buffer) double[N];    for(i = 0;i<N;i++)          pd4[i] = pd3[i] = 1000+20.0*i;    cout<<"Buffer contents:\n";    for(i = 0;i<N;i++)    {          cout<<pd3[i]<<" at "<<&pd3[i]<<"; ";          cout<<pd4[i]<<" at "<<&pd4[i]<<endl;          }              cout<<"\nCalling new and placement new a third time:\n";    delete []pd1;    pd1 = new double[N];    pd2 = new(buffer+N*sizeof(double)) double[N];    for(i = 0;i<N;i++)          pd2[i] = pd1[i] = 1000+20.0*i;    cout<<"Buffer contents:\n";    for(i = 0;i<N;i++)    {          cout<<pd1[i]<<" at "<<&pd1[i]<<"; ";          cout<<pd2[i]<<" at "<<&pd2[i]<<endl;          }        delete []pd1;    delete []pd3;        system("pause");    return 0;    }

Calling new and placement new:Buffer addresses: heap: 0xb31810 static: 0x443010Buffer contents:1000 at 0xb31810; 1000 at 0x4430101020 at 0xb31818; 1020 at 0x4430181040 at 0xb31820; 1040 at 0x4430201060 at 0xb31828; 1060 at 0x4430281080 at 0xb31830; 1080 at 0x443030Calling new and placement new a second time:Buffer contents:1000 at 0xb31840; 1000 at 0x4430101020 at 0xb31848; 1020 at 0x4430181040 at 0xb31850; 1040 at 0x4430201060 at 0xb31858; 1060 at 0x4430281080 at 0xb31860; 1080 at 0x443030Calling new and placement new a third time:Buffer contents:1000 at 0xb31810; 1000 at 0x4430381020 at 0xb31818; 1020 at 0x4430401040 at 0xb31820; 1040 at 0x4430481060 at 0xb31828; 1060 at 0x4430501080 at 0xb31830; 1080 at 0x443058


命名空间
  声明区域
  潜在作用域
  using namespace XXX;

  eg

namesp.h

#include <iostream>namespace pers{          const int LEN = 40;          struct Person          {                 char fname[LEN];                 char lname[LEN];                 };          void getPerson(Person &);          void showPerson(const Person &);          }namespace debts{          using namespace pers;          struct Debt          {                 Person name;                 double amount;                 };                           void getDebt(Debt &);          void showDebt(const Debt &);          double sumDebts(const Debt ar[],int n);          }

namesp.cpp

#include <iostream>#include "namesp.h"namespace pers{          using std::cout;          using std::cin;          void getPerson(Person & rp)          {               cout<<"Enter first name:";               cin>>rp.fname;               cout<<"Enter last name:";               cin>>rp.lname;               }                    void showPerson(const Person & rp)          {               std::cout<<rp.lname<<","<<rp.fname;               }          }          namespace debts{          void getDebt(Debt & rd)          {               getPerson(rd.name);               std::cout<<"Enter debt:";               std::cin>>rd.amount;               }                         void showDebt(const Debt & rd)          {               showPerson(rd.name);               std::cout<<":{1}quot;<<rd.amount<<std::endl;               }                         double sumDebts(const Debt ar[],int n)          {                 double total = 0;                 for(int i = 0;i<n;i++)                 {                         total+=ar[i].amount;                         }                 return total;                 }          }

namessp.cpp

#include <iostream>#include "namesp.h"void other(void);void another(void);int main(){    using debts::Debt;    using debts::showDebt;        Debt golf = {{"Benny","Goatsniff"},120.0};    showDebt(golf);    other();    another();        system("pause");    return 0;    }    void other(void){     using std::cout;     using std::endl;     using namespace debts;     Person dg = {"Doodles","Glister"};     showPerson(dg);     cout<<endl;     Debt zippy[3];     int i;          for(i = 0;i<3;i++)     {           getDebt(zippy[i]);           }     for(i = 0;i<3;i++)     {           showDebt(zippy[i]);           }     cout<<"Total debt:{1}quot;<<sumDebts(zippy,3)<<endl;     return ;     }     void another(void){     using pers::Person;     Person collector = {"Milo","Rightshift"};     pers::showPerson(collector);     std::cout<<std::endl;     }



原创粉丝点击