一、this指针
1.
2.应用场景
1)
2)将this指针作为函数的参数。一个对象可以通知另一个对象有关自身的地址。
   教师
提问|^
    V|答案
   学生
交叉类问题:
class B; // 短式声明
class A {
  B*/B&
};
class B {
  A*/A&
};
class A {
  A* m_a;
};
非法:
class B;
class A {
  B m_b;
};
class B {
  A m_a;
};
sizeof(A) ?
class A {
  A m_a;
};
3)通过this指针返回对象的自引用

二、常对象与常函数
常对象:
const A a (...);
const A* p = &a;
const A& r = a;
a、p、r一般通称为常对象。

常函数:拥有常属性的this指针的成员函数。在成员函数的参数表后面加上const关键字。
1.在常函数内部无法修改成员变量的值,除非该变量被mutable关键字修饰。
2.通过常对象只能调用常函数。
3.常属性不同的同型成员函数可以构成重载关系,根据调用对象的常属性进行重载匹配:
常->常
非常->非常
如果没有非常版本,非常对象也可以调用常版本。

三、析构函数
1.基本语法
class 类名 {
  ~类名 (void) {
    ...
  };
};
析构函数没有参数,不能重载。
2.栈中的对象,当期离开作用域时,析构函数被执行。堆中的对象,由delete运算符调用其析构函数。全局/静态对象,其析构函数当卸载进程时被执行。
3.构造和析构的顺序
构造:基类的构造函数->成员变量的构造函数->构造函数中的代码
析构:析构函数中的代码->成员变量的析构函数->基类的析构函数
4.如果一个类没有定义析构函数,那么系统就会提供一个缺省析构函数,调用类类型成员变量以及基类的析构函数,但是缺省析构函数不负责释放动态分配的资源。

四、拷贝构造和拷贝赋值
1.缺省的拷贝构造函数只能实现浅拷贝,因此会带来对象与其副本之间的指针耦合问题,为了实现深拷贝,就需要自己定义拷贝构造函数,以获得完整意义上的对象副本。
int a, b = 10;
(a = b) = 20;
2.缺省的拷贝赋值只能实现浅拷贝,因此会带来对象与其副本之间的指针耦合问题,为了实现深拷贝,就需要自己定义拷贝赋值,以获得完整意义上的对象副本。
实现步骤:
1)防止自赋值
2)释放原内存
3)分配新内存
4)获得新数据
5)返回自引用
练习:实现一个String类,可以通过C风格的字符串进行构造,支持拷贝构造和拷贝赋值,如果使用了动态内存分配,还需要提供析构函数。此外还要支持获得C风格字符串的接口c_str()

五、静态成员
1.静态成员是属于类的,而非静态成员是属于对象的。
2.静态成员变量的定义和初始化只能在类的外部进行,而不能放在构造函数中。
3.静态成员变量在该类的多个实例对象间共享。
4.访问静态成员可以通过类也可以通过对象,但是访问非静态成员只能通过对象。
5.静态成员函数只能访问静态成员,但是非静态成员函数既可以访问静态成员,也可以访问非静态成员。
6.静态成员函数没有this指针,也没有const属性。
7.静态成员也受访控属性的约束。
class Account {
public:
  static void setRate (double rate) {
    // ...
    m_rate = rate;
  }
private:
  string m_name;
  string m_passwd;
  double m_balance;
  static double m_rate;
};
Account::setRate (0.05);

c++ 04的更多相关文章

  1. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  2. Ubuntu 14.04中Elasticsearch集群配置

    Ubuntu 14.04中Elasticsearch集群配置 前言:本文可用于elasticsearch集群搭建参考.细分为elasticsearch.yml配置和系统配置 达到的目的:各台机器配置成 ...

  3. win8.1硬盘安装ubuntu14.04双系统

    在网上找了很多方法都失败了,原因是大多数方法都是用mbr方式安装的,如grub4dos,easybcd.以至于连自己都怀疑win8能不能用硬盘安装,差点就去买个u盘来安装了,就在打算放弃的时候在ubu ...

  4. 使用win10远程控制ubuntu16.04

    使用win10远程控制ubuntu16.04,网上很多需要安装xfce桌面的.今天介绍一下,不需要安装其他桌面,使用Ubuntu16.04自带桌面,漂亮美观. Ubuntu16.04端: 1.打开终端 ...

  5. ubuntu14.04下安装node.js

    在网上查了下,起初是下载了一个node-v0.12.7-linux-x64.tar.gz,解压在/home/node路径下,然后在/etc/profile中添加如下命令: export NODE_HO ...

  6. mono3.2和monodevelop4.0在ubuntu12.04上两天的苦战

    首先第一步是设置ubuntu server 12.04版更新源,推荐中科大的比较快:deb http://debian.ustc.edu.cn/ubuntu/ precise main multive ...

  7. Jexus Web Server 完全傻瓜化图文配置教程(基于Ubuntu 12.04.3 64位)[内含Hyper-v 2012虚拟机镜像下载地址]

    1. 前言 近日有感许多新朋友想尝试使用Jexus,不过绝大多数都困惑徘徊在Linux如何安装啊,如何编译Mono啊,如何配置Jexus啊...等等基础问题,于是昨日向宇内流云兄提议,不如搞几个配置好 ...

  8. Ubuntu14.04配置Mono+Jexus

    总所周知,ASP.NET是微软公司的一项技术,是一个网站服务端开发的一种技术,它可以在通过HTTP请求文档时再在Web服务器上动态创建它们,就是所谓动态网站开发,它依赖运行于 IIS 之中的程序 .但 ...

  9. deepsooncms在Ubuntu 14.04上部署教程

    deepsooncms在Ubuntu 14.04上部署教程 一.安装mono1.在命令行运行sudo apt-key adv --keyserver keyserver.ubuntu.com --re ...

  10. 在 Ubuntu 15.04 中使用 ubuntu-make、Eclipse 4.4、Java 8 以及 WTP

    Ubuntu 今天发布新版本了 其实昨天(2015-04-23)我就看到了 Ubuntu 发布新版本的新闻,下班后回家的第一件事就是访问 Ubuntu 的官网,很可惜,没有提供下载.今天(2015-0 ...

随机推荐

  1. libeXosip2(2-2) -- eXosip2 network API

    eXosip2 network API General purpose API. Functions int  eXosip_transport_set (osip_message_t *msg, c ...

  2. 揭开枚举类的面纱(Unlocking the Enumeration/enum Mystery)

    枚举给用户定义固定数据组提供了方便.枚举类就是一系列常量整型值,这也就意味着枚举类型不能被修改. 这里我们将要讨论C语言中枚举类型的用法和限制. 枚举通过枚举关键值定义,类似结构体定义 语法(Synt ...

  3. editplus配置详:

    1:设置删除整行快捷键 2:设置背景颜色 3:php 开发环境 在 http://download.csdn.net/detail/vspeter/6002287 下载 editplus 的php语法 ...

  4. jQuery限制文本框只能输入正整数

    //限制键盘只能按数字键.小键盘数字键.退格键 $("#txtQty").keydown(function (e) { var code = parseInt(e.keyCode) ...

  5. HashMap的存储结构及原理

    1.HashMap的数据结构(HashMap通过hashcode对其内容进行高速查找,是无序的) 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端. 数组 :数组的存储区是连续的,占 ...

  6. nyoj201 作业题

    作业题 时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 3   描述 小白同学这学期有一门课程叫做<数值计算方法>,这是一门有效使用数字计算机求数学问题近似解的方 ...

  7. IE常见的CSS的BUG(一)

    2011年6月,我毕业了.2012年我接触了CSS,本以为会好过些能赚点钱了,可谁知,Internet Explorer(下称IE),这个前端工程师的噩梦浏览器让我不再那么好过了.各种出现在IE身上的 ...

  8. linux 终止用户会话

    第一步使用 tty 命令 查看自己会话id:本例中会话id为1[root@localhost ~]# tty/dev/pts/1[root@localhost ~]# 第二步 使用 w 命令 查看当前 ...

  9. Redis的快照功能

    引言:  Redis是基于内存的数据库,同时也提供了若干持久化的方案,允许用户把内存中的数据,写入本地文件系统,以备下次重启或者当机之后继续使用.本文将描述如何基于Redis来设置这些功能. 快照的设 ...

  10. Asp.net MVC4 捆绑和压缩

    减少加载JavaScript和css文件加载时间 减少http请求次数和数据大小 无需配置 允许自定义和扩展