类的构造和析构
类的构造和析构
主要内容 类的构造函数 ■类的析构函数 类的复制构造函数
主要内容 ◼ 类的构造函数 ◼ 类的析构函数 ◼ 类的复制构造函数
回顾 class account ubli void deposit(double amount) void withdraw(double amount void display rivate char charx pwd double balance double min balance
class Account { }; void deposit(double amount); void withdraw(double amount); void display(); char* id; char* pwd; double balance; public: private: double min_balance; 回顾
例:实现转帐,从帐户A1790153向帐户 A2190156转帐30000元。 # include“ Account. h void maino Account al a2 1. display a2 display al withdraw(30000) a2 deposit(30000) al display 2. display
例:实现转帐,从帐户A1790153向帐户 A2190156转帐30000元。 Account a1, a2; #include “Account.h” a1.withdraw(30000); a2.deposit(30000); a1.display(); a2.display(); a1.display(); a2.display(); void main() { }
士分析原因 由于对象a1和a2在定义时,并没有专门 的语句为帐户的余额 balance进行初始化, 因此程序运行时, balance中存放的内容 是不确定的 ■因此,类中应该有一类操作专门负责对 象的初始化,使得对象的使用更安全、 可靠 ■对象的初始化由类的构造函数完成
分析原因 ◼ 由于对象a1和a2在定义时,并没有专门 的语句为帐户的余额balance进行初始化, 因此程序运行时,balance中存放的内容 是不确定的 ◼ 因此,类中应该有一类操作专门负责对 象的初始化,使得对象的使用更安全、 可靠 ◼ 对象的初始化由类的构造函数完成
士构造画数 ■构造函数的功能是在定义对象时被编译 系统自动调用来创建对象并初始化对象。 ■其定义格式如下: 类名>:(参数表>) <函数体
◼ 构造函数的功能是在定义对象时被编译 系统自动调用来创建对象并初始化对象。 ◼ 其定义格式如下: 构造函数 ::() { }
对象的初始化 例:新开一个户,令卡上初始金额为最小余额。 Account: Account(char* aid, char* apwd, double bal) id= new char[strlen( aid)+1 strcpy(id, aid) pwd =new char[strlen(apwd)+l strcpy(pwd, apwd) min balance = 10: balance s bala
对象的初始化 例:新开一个户,令卡上初始金额为最小余额。 Account::Account(char* aid, char* apwd, double bal) { id = new char[strlen(aid)+1]; pwd = new char[strlen(apwd)+1]; strcpy(id,aid); strcpy(pwd,apwd); min_balance = 10; balance = bal; }
例:新开一个帐户 Account: Account id -new char 91 strcpy(id,A0000000") pwd=new char[7 strcpy(pwd, " 1111ID) balance =10 min balance =10 仔细观察两个完成初始化功能的函数
例:新开一个帐户 Account::Account() { id = new char[9]; pwd = new char[7]; strcpy(id, “A0000000”); strcpy(pwd, “111111”); balance = 10; min_balance = 10; } 仔细观察两个完成初始化功能的函数……
构造函数的特点 构造函数是成员函数,函数体可写在类体内,也可写 在类体外。 构造函数的函数名与类名相同,且不指定返回值类型, 它有隐含的返回值,该值由编译系统内部使用。 构造函数可以没有参数,也可以有参数,因此可以重 载,即可以定义参数不同的多个构造函数。 每个类都必须有一个构造函数。如果类中没有显式定 义构造函数,则编译系统自动生成一个缺省形式的构 造函数,作为该类的公有成员。 程序中不能直接调用构造函数,在定义对象时编译系 统自动调用构造函数
◼ 构造函数是成员函数,函数体可写在类体内,也可写 在类体外。 ◼ 构造函数的函数名与类名相同,且不指定返回值类型, 它有隐含的返回值,该值由编译系统内部使用。 ◼ 构造函数可以没有参数,也可以有参数,因此可以重 载,即可以定义参数不同的多个构造函数。 ◼ 每个类都必须有一个构造函数。如果类中没有显式定 义构造函数,则编译系统自动生成一个缺省形式的构 造函数,作为该类的公有成员。 ◼ 程序中不能直接调用构造函数,在定义对象时编译系 统自动调用构造函数。 构造函数的特点
练习:定义一个职员类 Employe构造函数 (假设有职员编号、姓名、年龄、地址等数据) Employee: Employee id =new char[10 name=new char[20 age= O address=new char[100]
练习:定义一个职员类Employee的构造函数 (假设有职员编号、姓名、年龄、地址等数据) Employee::Employee() { } id = new char[10]; name = new char[20]; age = 0; address = new char[100];