• 第九章 怎样使用类和对象


    第九章 怎样使用类和对象

     

    1.构造函数

    不需要用户调用,在建立对象的时候自动执行;

    类内:类名(参数表){初始化语句;}//带参数类型

    类名(参数表):数据成员(参数),...{初始化语句;}//使用初始化列表;

    类名(参数表【参数类型 参数名=初始值....】){初始化语句;}

    注意:应在声明构造函数的同时指定默认值;

    一个类只能有一个默认构造函数,不可同时出现无参构造函数和默认构造函数

    类外:  类名::类名(参数表){初始化语句;}

    *说明:

    构造函数没有返回值,也没有类型;

    构造函数不能通过对象调用;

    可以用一个对象初始化另外一个对象;

    2.析构函数(~取反符)

    *执行析构函数的情况——对象释放

    *析构函数的作用不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作

    *析构函数只有一个,不能被重载;

    *先构造的后析构,后构造的先析构

    3.对象数组与对象指针(与普通类型使用相同)

    4.指向对象成员的指针

    数据成员:

    数据类型名 *指针变量名;(如果是公用的成员,可以直接通过指针在类外进行访问)

    函数成员:

    类型名 (类名::*指针变量名)(参数表);

    指针变量名 = &类名::成员函数名;

    5.公用数据的保护

    *常对象:

    类名const对象名[(实参表)];或者 const类名 对象名[(实参表)];

    说明:对于常对象,只能调用它的常成员函数,而不能调用普通成员函数;

    *常成员函数声明:函数类型 函数名(参数表)const

    说明:常成员函数可以访问长对象中的数据成员;但仍然不允许修改常对象中数据成员的值

    *将常对象中的某个数据成员修改成可更变的数据成员:mutable

    mutable 类型名 变量名;

    6.常对象成员

    *常数据成员:只能通过构造函数的参数初始化表对常数据成员初始化;

    *常函数成员:只能引用文本类的数据成员,不能修改;

    类型名 函数名(参数表)const//const在声明和定义都要使用该关键词

     

    形参

    实参

    合法性

    指针所指对象值的可变性

    指向非const型变量的指针

    const变量的地址

    合法

    可以

    指向非const型变量的指针

    Const变量的地址

    非法

    /

    指向const型变量的指针

    Const变量的地址

    合法

    不可以

    指向const型变量的指针

    const变量的地址

    合法

    不可以

     

    7.对象的常引用

    如果不希望函数调用参数的时候,修改参数,可以把函数形参声明为常引用

    函数类型 函数名 const 类型名 &);

    8.Const型数据的小结

    形式

    含义

    类名 const 变量名

    定义了常对象,其值在任何情况下都不可以改变

    类型名 类名::函数名 const

    定义了类内常成员函数,可引用,不可修改

    类名 *const 变量名

    定义了指向该类对象的常指针,指向的对象不可变

    Const 类名 *变量名

    定义指向该类的常对象的指针,该对象不可通过指针指向来修改

    Const 类名&变量名 = 对象名

    定义该类对象的引用,两种指向同一空间,对象不可修改

    9.对象的动态建立和释放

    New运算符动态分配空间后,返回一个指向新对象的指针,即内存空间的起始地址

    Delete

    10.对象赋值和复制

    赋值:对象1 = 对象2

    复制:类名 对象2(对象1);

      类名 对象2 = 对象1

    复制构造函数:参数为同类的常引用

    11.静态成员

    1.静态数据成员

    *如果希望对象中的数据成员是一致的那么可以声明为静态数据成员

    *静态数据成员不属于某一个对象,在为对象分配空间中不包括静态数据成员所占的空间。静态数据成员是有独立的存储空间。

    *所有同类的对象都共享类中的静态成员数据

    *声明形式:static 类型名 变量名

    *初始化形式:类型名 类名::变量名 = 初始值;

    //不能用参数初始化表对静态数据成员初始化。

    *在类外,静态数据成员即可用对象名访问,也可用类名访问

    2.静态函数成员

    *静态函数成员是类的一部分而不是对象的一部分,所以在类外调用公用的静态成员函数,要用类名和作用域运算符“::”。

    调用形式:类名::函数部分;或者 对象名.函数部分;

    *静态成员函数没用this指针,因此静态成员函数不能访问对象的非静态数据成员;但是可以直接访问本类的静态成员数据;静态成员函数主要用来访问静态数据成员,而不访问非静态数据成员(若非要使用非静态成员,应通过对象名和成员运算符“.”)

    说明:公用成员函数可以引用静态数据成员和非静态数据成员

    约定:只用静态成员函数引用今天数据成员,而不引用非静态数据成员。

    12.友元

    1.友元函数:

    *普通函数声明为友元函数:friend 类型名 函数名(参数表);

    *类成员函数声明为友元函数:friend 类型名 其他类名::函数名 (参数表);

    //这里使用到类的“提前引用”的声明(Class 类名;

    建议:先完成类的建立在添加友元成员函数

    2.友元类:

    *friend 类名;

    *说明:1友元的关系是单向的;2友元的关系不能传递;

    13.类模板(功能相同,仅仅是数据类型不同)

    *声明:

    template < c lass 虚拟类型名1 ,c lass 虚拟类型名2...>

       C lass 类模版名{

    类体;

    *类模板是类的抽象,类是类模板的具体实现

    *使用:

    类模板名<实际类型名> 对象名(参数表);

     

    *特别注意:在模版外定义成员函数格式有所不同

    Tempalte <class 虚拟类型名>

    函数类型名 函数模版名<虚拟类型名> :: 成员函数名(参数表){函数体;};

    *定义对象

    类模板名 <实际类型名> 对象名(参数表);

    个人比较分享,欢迎指教;未经允许,请勿转载;

    个人分享,欢迎指导,未经允许,请勿转载。谢谢!
  • 相关阅读:
    浅谈缓存管理
    [Architecture Pattern] Database Migration (上)
    knockout.js的学习笔记4
    cenOS5.5安装oracle10g(傻瓜篇)
    SportsStore:管理 — 精通ASP.NET MVC 3
    ASP.NET MVC下的异步Action的定义和执行原理
    基于EF 4.3.1 Code First的领域驱动设计实践案例
    asp.net缓存
    《Pro ASP.NET MVC 3 Framework》部署
    Asp.Net MVC 3.0【Hello World!】
  • 原文地址:https://www.cnblogs.com/hello-OK/p/7054685.html
Copyright © 2020-2023  润新知