`

c++学习笔记十二

    博客分类:
  • c++
c++ 
阅读更多

类的操作
1 类对象使用指针的三种情况:
一、使用指针成员访问运算符-> ,来调用函数
二、作为函数的参数
三、作为类的数据成员'

2 指针作为数据成员
示例代码如下:
package类 包含两个数据成员一个是Box类,一个是指向package的指针
class Package{
//constructor 构造器
public :
Package(Box* pBox) : theBox(*pBox),pNext(0){}

//get 方法
Box getBox() const{//返回box对象
return theBox;
}



Package* getNext(){//返回下一个package
return pNext;
}

//成员变量
private:
Box theBox;
Package* pNext;
}
修忙后的package类为
class Package{
//constructor 构造器
public :
Package(Box* pNewBox) : theBox(pNewBox),pNext(0){}

//get 方法
Box getBox() const{//返回box对象
return theBox;
}



Package* getNext(){//返回下一个package
return pNext;
}

//成员变量
private:
Box theBox;
Package* pNext;
}

定义TruckLoad类 用来表示一组Package对象

class TruckLoad{
public:
//constructor 构造器
TruckLoad(Box* pBox=0,int count=1);
Box * getFirstBox();
Box * getNextBox();
void addBox(Box* pBox);


private:
Package * pHead; //首节点
Package * pTail; //尾节点
Package * pCurrent; //当前节点
}

TruckLoad 的实现 (创建一个空列表)
TruckLoad:TurckLoad(Box * pBox,int count){
pHead=pTail=pCurrent=0;
if((cont>0)&&(pBox!=0)){
for(int i=0;i<count;i++){
addBox(pBox+1);
}
}
}
定义成员函数
/*添加节点*/
void TruckLoad::addBox(Box* pBox){
Package * pPackage=new Package(Box* pBox);
if(pHead){ //检查列表是不为空
pTail->setNext(pPackage); //在末尾添加元素
}else{ //如果列表为空
pHead=pPackage; //新元素即为首元素
pTail=pPackage; //相应的也是尾元素
}
}
/*取首节点地址*/
Box * TruckLoad::getFirstBox(){
pcurrent=pHead; //当前节点指向首节点
return pCurrent->getBox(); //从当前节点中取得Box的地址
}
/*取下一个节点*/
Box * TruckLoad::getNextBox(){
if(pCurrent){ //如果当前节点不为空
pCurrent=pCurrent->getNext; //当前节点指向下一个
}else{ //如果为空
pCurrent=pHead; //指向首节点
}
return pCurrent?pCurrent->getNext:0;
}
使用列表(见程序prog13.01)

3 控制对类的访问(限制类的可访问性)

嵌套类
用public 访问指定修饰的嵌套类
友元类 friend class TruckLoad;





示例代码如下
#ifndef LIST_H
#define LIST_H
#include "Box.h"


/*********************************
* List.h包含个存放列表的类 *
* 注:package要放在TruckLoad前 *
*********************************/


/*列表节点对象*/
class Package{
public:
Package(Box * pNewBox);//构造器


//成员方法
Box * getBox() const;
Package * getNext() const;
void setNext(Package * pPackage);//在列表末尾添加一个


package

//成员变量
private :
Box * pBox;
Package * pNext;


};

/*列表*/
class TruckLoad{
public:
TruckLoad(Box * pBox=0,int count=1);//构造器

//成员方法
Box * getFirstBox(); //取得首节点
Box * getNextBox(); // 取得下一节点
void addBox(Box * pBox); //向列表中添加一个新节点
//成员变量
private:
Package * pHead;//首节点
Package * pTail;//尾节点
Package * pCurrent;//当前节点
};
#endif



4 副本构造函数的重要性 (用于创建军与已有对像完全相同的对象)
实现副本构造函数 示例代码如下:
TruckLoad::TruckLoad(TruckLoad load){
//在此处实现函数副本
}
引用参数
TruckLoad::TruckLoad(const TruckLoad &load){
//在此处实现函数副本
}
代码实现如下:
TruckLoad::TruckLoad(const TruckLoad &load){
pHead=pTail=pCurrent=0;
if(load.pHead==0){ //如果列表为空
return;
}
Package * pTemp= load.pHead;
do{
addBox();
}while(pTemp=pTemp->pNext);
}
5 对象内部的动态内存分配

析构函数 可以释放内存的类成员
定义析构函数 示例代码如下: (注:没出有返回类型或是参数)
TruckLoad::~TruckLoad(){
//Code to destroy the objece
}
默认的析构函数: 如果没有显示的定义析构函数,编译器会生成一个


公共或内联析构函数


示例代码如下:
在.h头文件中
class Box{
public:
~Box();//析构函数原型
}
在.cpp实现文件
Box::Box(){
cout<<"Box destructor called!"<<endl;
}

实现析构函数
list.cpp中的析构函数的定义

TruckLoad::~TruckLoad(){
while(pCurrent=pHead->pNext){
delete pHead;
pHead=pCurrent;
}
delete pHead;
}

6 类的引用
引用用作类的成员 示例代码如下:
class Package{
public:
Box & rBox;
Package * pNext;


~Package();
void setNext(Package * pPackage);
Package(Box &rNextBox);
}
在list.cpp中,构造函数的定义
TruckLoad::Package::Package(Box & rNewBox):rBox


(rNewBox),pNext(0){}

分享到:
评论

相关推荐

    c++学习笔记精华版

    ### C++ 学习笔记精华版 #### 一、C++ 语言概述 **1、历史背景** - **C++ 的江湖地位** - Java、C、C++、Python、C# 是当前主流的编程语言之一,而 C++ 在这些语言中以其高效性和灵活性著称。 - **C++ 之父 ...

    C++学习笔记本

    C++学习笔记C++学习笔记C++学习笔记C++学习笔记C++学习笔记

    C++学习笔记.pdf

    C++学习笔记

    C++ 学习笔记 整理

    这份"C++学习笔记"涵盖了C++的基础到高级概念,旨在帮助初学者和有一定经验的程序员深入理解并掌握C++。 在C++的学习过程中,以下几个关键知识点是不可或缺的: 1. **基础语法**:C++起源于C语言,因此它保留了...

    c++学习笔记.pdf

    C++是一种静态类型、编译式、通用的编程语言,它支持过程化编程、面向对象编程和泛型编程。C++广泛应用于软件开发领域,包括操作...以上内容覆盖了C++语言中一些基础知识点,对于学习和理解C++编程具有重要的指导意义。

    【C++学习笔记】一份详细的学习笔记,让你轻松掌握C++编程!

    【C++学习笔记】这份详尽的资源是为那些希望深入了解C++编程语言的人们精心准备的。C++是一种强大的、通用的编程语言,它的设计理念是面向对象,同时支持过程化编程,使得它在系统软件、应用软件、游戏开发、设备...

    C++学习笔记.doc

    【C++ 学习笔记】深入理解编程与C++基础 C++是一种强大的、面向对象的编程语言,广泛应用于系统软件、游戏开发、嵌入式系统以及许多高性能应用。学习C++不仅仅是掌握语法,更重要的是理解编程的核心概念,以便更好...

    C++ 学习笔记002

    C++ 学习笔记C++ 学习笔记C++ 学习笔记C++ 学习笔记002

    C++核心学习笔记pdf

    C++核心学习笔记pdf

    C++ 学习笔记003

    C++ 学习笔记C++ 学习笔记C++ 学习笔记C++ 学习笔记C++ 学习笔记003

    C++ 学习笔记004

    C++ 学习笔记C++ 学习笔记C++ 学习笔记C++ 学习笔记C++ 学习笔记004

    C++ 学习笔记001

    C++ 学习笔记C++ 学习笔记C++ 学习笔记C++ 学习笔记001

    c++学习笔记(个人学习时做的笔记)

    【C++学习笔记概述】 C++是一门强大的编程语言,其在C语言的基础上进行了扩展,引入了许多现代化的特性。这份笔记主要涵盖了C++的基础知识,包括C++11和C++17的新特性,旨在帮助初学者理解C++的核心概念。 ### C++...

    C++学习笔记.docx

    C++学习笔记 本文档提供了C++语言的基础知识,包括输入输出、变量、数据类型、运算符、内存管理、指针、流程控制语句等。 输入输出 C++语言提供了多种输入输出方式,包括使用cin和cout对象。cin对象用于从标准...

    新手C++学习笔记(仅供菜鸟成长参考).rar

    《新手C++学习笔记》是一份专为编程初学者打造的资源,旨在帮助那些刚刚踏入C++编程领域的“菜鸟”快速成长。这份笔记包含了前辈们的实践经验总结,具有很高的学习价值。文档以.doc格式存储,方便读者使用常见的文字...

    黑马C++学习笔记

    今天,让我们一起深入探究《黑马C++学习笔记》,这本涵盖了C++编程基础与核心概念的全面教材。 首先,C++的基础知识是每个学习者必须掌握的部分,这包括变量的声明与赋值、输出语句等基本操作。在C++中,变量的声明...

    c++学习笔记

    这份"C++学习笔记"涵盖了C++的基础概念、语法结构、面向对象编程以及可能的高级主题,旨在帮助初学者或者有经验的程序员巩固C++知识。 首先,C++是从C语言发展而来,它保留了C语言的效率,同时引入了类和对象的概念...

    C++整理笔记word版——01 C++学习笔记

    C++是一种强大的面向对象编程语言,它源自C语言并扩展了其...学习这些概念是成为C++程序员的第一步。在实际编程中,还需要理解类、对象、继承、多态等面向对象编程的概念,以及函数、模板、文件操作等更高级的主题。

    C++学习笔记经典(与C比较)

    《C++学习笔记经典(与C比较)》这份资料应该会详细讲解这些知识点,并通过实例来帮助读者深入理解C++与C的差异,以及如何在实际编程中应用C++的特性和功能。这份资料可能会涵盖基本语法、类和对象、模板、STL的使用...

Global site tag (gtag.js) - Google Analytics