一、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. About Adultism and why things ar the way they are

    About - Adultism About Adultism and why things ar the way they are In this page we will try to clari ...

  2. python3 urllib.request.urlopen() 地址打开错误

    错误内容:UnicodeEncodeError: 'ascii' codec can't encode characters in position 28-29: ordinal not in ran ...

  3. Oracle insert update 时间处理

    24小时表示方法:to_date(’ ::’,’yyyy-mm-dd hh24:mi:ss’) 12小时表示方法:to_date(’ ::’,’yyyy-mm-dd hh:mi:ss’) ','S75 ...

  4. java bootstrap分页

    样式如下 datumMap.total总共多少页 datumMap.page第几页 <nav class="pull-right"> <ul class=&quo ...

  5. Java之面向对象相关问题集

    面向对象的特征有哪些方面  1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解所有问题,而仅仅是选择当中的一部分,临时不用部分细节. 抽 ...

  6. Dynamics CRM 常用 JS 方法集合

    JS部分 拿到字段的值 var value= Xrm.Page.getAttribute("attributename").getValue(); Xrm.Page.getAttr ...

  7. samba常用命令

    1.# smbstatusSamba version 3.6.23PID Username Group Machine ---------------------------------------- ...

  8. AES算法简介

    AES算法简介 一. AES的结构 1.总体结构 明文分组的长度为128位即16字节,密钥长度可以为16,24或者32字节(128,192,256位).根据密钥的长度,算法被称为AES-128,AES ...

  9. CSS结构伪类E:first-child/last-child/only-child/empty

    E:first-child解释:E的父元素的第一个子元素正好是E,给这个E定义样式 E:last-child解释:E的父元素的最后一个子元素正好是E,给这个E定义样式 E:only-child解释:E ...

  10. Eclipse汉化后怎么改回英文版 (中文 改 英文)

    Eclipse汉化后怎么改回英文版(可切换中英文) 很多朋友将MyEclipse汉化后还想改回英文的,其实只要修改MyEclipse的配置文件就可以了,这里我以MyEclipse7.0为例演示一下如何 ...