//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; }
相关推荐
### C++基础教程知识点概述 #### 一、简介与教程使用指南 - **读者范围**:本教程适合希望学习C++语言的所有读者。对于具备其他编程语言基础或计算机相关基础知识的读者来说,能够更快理解教程内容,但这并非必要...
《高效C++中级编程教程》是一份针对有一定C++基础的学习者精心编撰的课程资料。这份教程旨在深化对C++编程思想的理解,特别是面向对象的编程思想,以及这一思想在实际编程中的应用技巧。教程内容丰富,涵盖了C++语言...
3. C++内存管理:C++中的内存管理主要通过new和delete操作符来完成,分别用于动态分配和释放内存。C++11新增了智能指针(如std::unique_ptr和std::shared_ptr)来自动管理内存生命周期,减少内存泄漏的风险。 4. ...
- **C++中的内存操作**:在C++中,使用`new`和`delete`进行动态内存分配和释放,而在C语言中则使用`malloc`和`free`。 - **字符串操作**:在C++标准库中,提供了`<cstring>`头文件来替代C语言中的字符串操作函数。...
《C++基础教程》是一本面向初学者的编程教材,旨在教授C++语言的基本概念和高级特性。教程采用浅显易懂的语言,并配以丰富的代码实例,使得学习过程更为直观和实践导向。以下是对教程各部分内容的详细说明: 1. **...
### C++基础知识与高级问题详解 #### 一、快速指南:C程序员转向C++ 对于从C语言转向C++的新手来说,以下几点建议可以帮助你更好地适应C++编程环境: 1. **宏定义的替代方案**: - 使用`const`或`enum`来定义...
#### 一、C++基础知识 **1. C++语言概述** - **历史背景**: C++是由Bjarne Stroustrup于20世纪80年代初在C语言的基础上发展起来的。它保留了C语言的所有优点,并引入了面向对象的特性。 - **特点**: - 兼备高级...
在深入探讨"C++高级编程"这一主题时,我们首先需要理解C++的内存结构和对象模型,这些都是C++程序员进阶必备的知识。本教程“C++高级编程参考教程-1”...对于有C++基础的开发者而言,这是一次提升编程能力的宝贵机会。
适合新手的教程,我自己也在学,以下是部分学习笔记 69 函数指针 70 动态内存分配 Dynamic memory pointer = new type pointer = new type [elements] 第一个表达式用来给一个单元素的数据类型分配内存。第二个...
### C++基础教程知识点概述 #### 一、C++程序结构 - **程序的基本组成**:C++程序由一个或多个源文件组成,每个源文件包含一个或多个函数定义。 - **主函数main()**:每个C++程序至少包含一个`main()`函数,它是...
本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...
此外,C++改进了内存管理,使用`new`和`delete`代替`malloc`和`free`,并引入了标准字符串类和iostream库,以及异常处理机制。 二、关键字和变量 C++扩展了C语言的关键字集合,例如增加了`bool`型变量,用于表示真...
7.6 动态内存分配与new和delete运算符 7.7 static类成员 7.8 数据抽象与信息隐藏 7.8.1 范例:数组抽象数据类型 7.8.2 范例:字符串抽象数据类型 7.8.3 范例:队列抽象数据类型 7.9 容器类与迭代 7.10 ...
7.6 动态内存分配与new和delete运算符 7.7 static类成员 7.8 数据抽象与信息隐藏 7.8.1 范例:数组抽象数据类型 7.8.2 范例:字符串抽象数据类型 7.8.3 范例:队列抽象数据类型 7.9 容器类与迭代 7.10 ...
在本教程中,我们将深入探讨如何模仿`std::string`的功能来创建一个自定义的字符串类。这个过程可以帮助我们理解字符串内部的工作原理,以及如何有效地管理字符数组。 首先,我们要创建一个名为`MyString`的类,它...
在C++中,`new`和`delete`操作涉及了内存对齐、异常安全和内存池等概念。内存对齐确保数据结构在内存中的位置符合特定规则,提高访问效率。异常安全确保在抛出异常时,已经分配的内存能得到正确释放。内存池是一种...
根据给定的信息,我们可以整理出一份关于C++基础教程的关键知识点。这份教程旨在为初学者提供全面的基础指导,涵盖从程序结构到面向对象编程的重要概念。 ### 一、C++程序的基本结构 C++程序的基本结构是理解如何...