C++大学基础教程_10_67_new和delete和static

//Employee.h
#ifndef EMPLOYEE_H_
#define EMPLOYEE_H_

class Employee
{
public:
	Employee(const char * const,const char * const);
	~Employee();
	const char *getFirstName() const;
	const char *getLastName() const;
	static int getCount();
private:
	char *firstName;
	char *lastName;

	static int count;
	
};

#endif
//Employee.cpp

#include "Employee.h"
#include <iostream>
#include <cstring>
using namespace std;

int Employee::count = 0;

int Employee::getCount()
{
	return count;
}

Employee::Employee(const char * const first,const char * const last)
{
	firstName = new char[strlen(first) + 1];
	strcpy(firstName,first);
	lastName = new char[strlen(last) + 1];
	strcpy(lastName,last);

	count++;
	cout << "Employee constructor for " << firstName << " " << lastName 
		   << " called." << endl;
}

Employee::~Employee()
{
	cout << "~Employee() called for " << firstName << " " << lastName
		    << endl;
	delete [] firstName;
	delete [] lastName;

	count--;
}

const char * Employee::getFirstName() const
{
	return firstName;
}

const char * Employee::getLastName() const
{
	return lastName;
}
//main.cpp

#include "Employee.h"
#include <iostream>
using namespace std;

//只要测试new 和delete的用法,以及static 类成员
int main()
{
	cout << "Number of employee before instantiation of any object is "
		   << Employee::getCount() << endl;
	
	Employee *ePtr1 = new Employee("Susan","Banke");
	cout << "Number of employees after objects are instantiated is " 
		   << ePtr1->getCount() << endl;
	Employee *ePtr2 = new Employee("Jax","Lanester");
	cout << "Number of employees after objects are instantiated is " 
		   << ePtr2->getCount() << endl;
	Employee *ePtr3 = new Employee("Bob","Javin");
	cout << "Number of employees after objects are instantiated is " 
		   << ePtr3->getCount() << endl;
	cout << "Number of  all employees after objects are instantiated is "
		   << Employee::getCount() 
	//    << ePtr1->getCount()
	//    << (*ePtr2).getCount()
	//	   << ePtr2->getCount()
	//	   << ePtr3->getCount()       //显示的结果上面全部是一样的,这就是static的用法
	       << endl;
	cout << "Employee 1:" 
		   << ePtr1->getFirstName() << " " 
		   << ePtr1->getLastName() << endl;
	cout << "Employee 2:"
		   << ePtr2->getFirstName() << " " 
		   << ePtr2->getLastName() << endl;
	cout << "Employee 3:" 
		   << ePtr3->getFirstName() << " " 
		   << ePtr3->getLastName() << endl;

	delete ePtr1;
	ePtr1 = 0;
	delete ePtr2;
	ePtr2 = 0;
	delete ePtr3;
	ePtr3 = 0;

	cout << "Number of employees after objects are deleted is "
		   << Employee::getCount() << endl;;
	system("pause >> cout");
	return 0;
}

 

 

猜你喜欢

转载自jia-shun.iteye.com/blog/2092267