class Name const char s class Table Name
• 析构函数最常见的用途是为了释放构造函 数请求的存储空间。 class Name{ const char *s; }; class Table{ Name *p; size_t sz; public: Table(size_t s=15) {p=new Name[sz=s]; } ~Table() {delete[] p; } }; 吉林大学计算机学院 第 3页 size_t unsigned integer Result of sizeof operator. STDDEF. H and other include files C++程序设计
void f(int i) { Table aa; Table bb; if(i>0){ Table cc; //…} Table dd; //… } 吉林大学计算机学院 第 8页 C++程序设计
class Table{ Name *p; size_t sz; public: Table(size_t s=15) {p=new Name[sz=s]; cout<<"new"<<sz<<'n'; } ~Table() {delete[] p; cout<<"delete"<<sz<<'n'; } }; 吉林大学计算机学院 第 9页 C++程序设计
int main(int argc, char* argv[]) { Table aa(1); Table bb(2); { Table cc(3); } Table dd(4); return 0; } 吉林大学计算机学院 第 10页 C++程序设计
• 10. 4. 4. 1对象的复制 { Table t 1; Table t 2=t 1; t 1 //复制初始化 Name *p; size_t sz; Table t 3; t 3=t 2; t 2 Name *p; //复制赋值 size_t sz; } 吉林大学计算机学院 第 11页 new Name[sz=s] t 3 Name *p; size_t sz; C++程序设计
• 重载赋值号 Table& operator=(const Table&); Table& operator=(const Table&t) { if(this!=&t){ delete[]p; p=new Name[sz=t. sz]; for(int i=0; i<sz; i++) p[i]=t. p[i]; } return *this; } 吉林大学计算机学院 第 13页 C++程序设计
• 10. 4. 6 类对象作为成员——容器类 class Club{ string name; Table member; Table officer; Date founded; public: Club(const string& n, Date fd); }; 吉林大学计算机学院 第 15页 C++程序设计
• 10. 4. 6. 2成员常量 • 静态常量整型成员可用常量表达式初始 化 class Curious{ public: static const int c 1=7; static int c 1=7; const int c 2=10; static const float c 4=f(17); }; 吉林大学计算机学院 第 21页 C++程序设计
class Unique_handle{ private: Unique_handle(const Unique_handle&); Unique_handle& operator=(const Unique_handle&) … 如何屏蔽赋值构造 }; 函数或复制赋值函 struct Y{ Unique_handle a; 数? }; Y y 1; Y y 2=y 1; 吉林大学计算机学院 第 23页 C++程序设计
delete t 1; delete [] t 2; delete [] t 3; delete t 4; } 吉林大学计算机学院 第 27页 C++程序设计
#include <vector> #include <iostream> using namespace std; { vector<Table> *pl=new vector<Table>(10); delete p 1; } 吉林大学计算机学院 第 28页 C++程序设计
class X{ //… static Table memtbl; }; Table tbl; Table x: : memtbl; namespace Z{ Table tbl 2; } 吉林大学计算机学院 第 31页 C++程序设计
测试程序(作业+上机) 1 -3 -2004 main( ) { Date: : set_default (28, 2, 2002); Date d(31, 2, 2000); d. add_month(12); d. add_year(1); d. add_day(2); cout<<d. day()<<“-”<<d. month()<<“”<<d. year()<<endl; cout<< d. char_rep()<<endl; } 吉林大学计算机学院 第 37页 C++程序设计
- Slides: 37