`
_jia_shun
  • 浏览: 27244 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

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;
}

 

 

  • 大小: 165 KB
分享到:
评论

相关推荐

    C++基础教程完整版

    ### C++基础教程知识点概述 #### 一、简介与教程使用指南 - **读者范围**:本教程适合希望学习C++语言的所有读者。对于具备其他编程语言基础或计算机相关基础知识的读者来说,能够更快理解教程内容,但这并非必要...

    高效C++中级编程教程

    《高效C++中级编程教程》是一份针对有一定C++基础的学习者精心编撰的课程资料。这份教程旨在深化对C++编程思想的理解,特别是面向对象的编程思想,以及这一思想在实际编程中的应用技巧。教程内容丰富,涵盖了C++语言...

    C++高级教程 讲义

    3. C++内存管理:C++中的内存管理主要通过new和delete操作符来完成,分别用于动态分配和释放内存。C++11新增了智能指针(如std::unique_ptr和std::shared_ptr)来自动管理内存生命周期,减少内存泄漏的风险。 4. ...

    C++入门教程 txt

    - **C++中的内存操作**:在C++中,使用`new`和`delete`进行动态内存分配和释放,而在C语言中则使用`malloc`和`free`。 - **字符串操作**:在C++标准库中,提供了`&lt;cstring&gt;`头文件来替代C语言中的字符串操作函数。...

    C++基础教程

    《C++基础教程》是一本面向初学者的编程教材,旨在教授C++语言的基本概念和高级特性。教程采用浅显易懂的语言,并配以丰富的代码实例,使得学习过程更为直观和实践导向。以下是对教程各部分内容的详细说明: 1. **...

    国外网站上找到的C++经典问题_c++基础

    ### C++基础知识与高级问题详解 #### 一、快速指南:C程序员转向C++ 对于从C语言转向C++的新手来说,以下几点建议可以帮助你更好地适应C++编程环境: 1. **宏定义的替代方案**: - 使用`const`或`enum`来定义...

    C++编程基础教程.docx

    #### 一、C++基础知识 **1. C++语言概述** - **历史背景**: C++是由Bjarne Stroustrup于20世纪80年代初在C语言的基础上发展起来的。它保留了C语言的所有优点,并引入了面向对象的特性。 - **特点**: - 兼备高级...

    C++高级编程参考教程-1

    在深入探讨"C++高级编程"这一主题时,我们首先需要理解C++的内存结构和对象模型,这些都是C++程序员进阶必备的知识。本教程“C++高级编程参考教程-1”...对于有C++基础的开发者而言,这是一次提升编程能力的宝贵机会。

    c++基础教程,简洁扼要

    适合新手的教程,我自己也在学,以下是部分学习笔记 69 函数指针 70 动态内存分配 Dynamic memory pointer = new type pointer = new type [elements] 第一个表达式用来给一个单元素的数据类型分配内存。第二个...

    c++基础教程

    ### C++基础教程知识点概述 #### 一、C++程序结构 - **程序的基本组成**:C++程序由一个或多个源文件组成,每个源文件包含一个或多个函数定义。 - **主函数main()**:每个C++程序至少包含一个`main()`函数,它是...

    传智播客扫地僧视频讲义源码

    本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...

    c++ 32套免费资源教程

    此外,C++改进了内存管理,使用`new`和`delete`代替`malloc`和`free`,并引入了标准字符串类和iostream库,以及异常处理机制。 二、关键字和变量 C++扩展了C语言的关键字集合,例如增加了`bool`型变量,用于表示真...

    C++大学教程,一本适合初学者的入门教材(part2)

    7.6 动态内存分配与new和delete运算符 7.7 static类成员 7.8 数据抽象与信息隐藏 7.8.1 范例:数组抽象数据类型 7.8.2 范例:字符串抽象数据类型 7.8.3 范例:队列抽象数据类型 7.9 容器类与迭代 7.10 ...

    C++大学教程,一本适合初学者的入门教材(part1)

    7.6 动态内存分配与new和delete运算符 7.7 static类成员 7.8 数据抽象与信息隐藏 7.8.1 范例:数组抽象数据类型 7.8.2 范例:字符串抽象数据类型 7.8.3 范例:队列抽象数据类型 7.9 容器类与迭代 7.10 ...

    String_C++_order9wd_string_

    在本教程中,我们将深入探讨如何模仿`std::string`的功能来创建一个自定义的字符串类。这个过程可以帮助我们理解字符串内部的工作原理,以及如何有效地管理字符数组。 首先,我们要创建一个名为`MyString`的类,它...

    C++ 内存管理算法和实现.

    在C++中,`new`和`delete`操作涉及了内存对齐、异常安全和内存池等概念。内存对齐确保数据结构在内存中的位置符合特定规则,提高访问效率。异常安全确保在抛出异常时,已经分配的内存能得到正确释放。内存池是一种...

    c++教程基础

    根据给定的信息,我们可以整理出一份关于C++基础教程的关键知识点。这份教程旨在为初学者提供全面的基础指导,涵盖从程序结构到面向对象编程的重要概念。 ### 一、C++程序的基本结构 C++程序的基本结构是理解如何...

Global site tag (gtag.js) - Google Analytics