类的基本思想是数据抽象封装
1.this

成员函数通过一个名为this的额外隐式参数来访问调用它的对象,当我们调用一个函数的时候,用请求该函数的对象的初始化this。

如果某个类的名字为sale,某个对象为total,成员函数为isbn

total.isbn()可以理解成sale::isbn(total);

任何自定义名为this的行为都是非法的。

因为this总是指向"这个”对象,所以this是一个常量指针,我们不允许改变this指向的地址。

定义一个返回this的类

class sale{
public :
  int x;
  sale &th(){
    return *this;
  }
};

2.

引入const成员函数

我们在类内定义这样一个函数。

int isbn()const{return this->book;}

const关键字作用于函数时一个重要的作用就是修改隐式指针t,his指针的类型。

(1).默认情况下this指针是指向类类型非常量版本的常量指针。这句话的意思是this是一个常量指针,指向的地址不可以改变,但指向的类的内容可以改变。

(2).在默认情况下我们不能把this绑定到一个常量对象上面,也即是我们不能再常量对象上调用一个普通成员函数。

(3).类中必须要有自己写的构造函数,这种类才可以声明const对象。

3.

构造函数

如果一个类名为point,有一个int型成员名为a,一个char型的成员名为b,那么构造函数可以写成如下形式。

point(int a,char b):a(a),b(b){};

point():a(0),b(0);    //默认构造函数

用构造函数做隐式转化

构造函数可以接受一个参数的传入时,可以将此种类型对象隐式转化为此种类。

class gaofang{
public:

  string x;
  gaofang(const string x):x(x+"sa"){};
};
string cmp(gaofang a){  

  return a.x;
}

调用函数的时候可以这样调用

cmp(string("sa"));

不可以这样

cmp("sa");

因为这样有const char[]->string->gaofang的两步隐式转化,不可以连续的隐式转化。

4.

类的声明

就像函数可以把声明和定义分开一样,我们也可以仅声明而不定义这个函数。

class screen;        //screen类的声明

我们将这种声明之后定义之前的类称作不完全类型。

(1)不完全类型只能在非常有限的情况下使用,可以定义指向这种类型的指针或引用,也可以声明(不是定义)以不完全类型作为参数或返回类型的函数。

(2)对于一个类来说,我们创建他的对象之前该类必须被定义过,而不能仅仅声明,否则,编译器就不知道这样的对象需要多少储存空间。

5.

友元函数

类允许其他函数或其他类访问他的非公有成员,方法是将函数或类作为它的友缘,只需要在类中增加一条以friend开始的声明语句。

class gaofang{
friend int add(gaofang);

private:
  int a;
};
int add(gaofang a){
  return a.a;
}

6.

委托构造函数

一个委托构造函数使用它的所属类的其他   构造函数执行他自己的构造过程,或者说将自己的只能委托给其他构造函数。

gaofang(int a):a(a){};
gaofang():gaofang(1){};

7.

默认构造函数

定义:一个函数是默认构造函数,当且仅当调用它不需要传入任何参数,这个函数可以是用户定义的也可以是系统定义的

8.拷贝构造函数

如果一个构造函数的第一个参数是自身类型的引用,且任何额外的参数都有默认值,那么我们称这个函数是拷贝构造函数。

我们如果自己没有定义拷贝构造函数,那么编译器会为我们定义一个合成拷贝构造函数,合成拷贝构造函数会逐元素拷贝。

有以下两种拷贝初始化方式

⊙gaofang b(a);
⊙gaofang b = a;

类有构造函数,会编译器会生成一个重载的赋值运算符。

拷贝初始化的限制

如果我们使用的初始化的要求通过一个explicit的构造函数来进行类型转化,那么使用拷贝初始化还是直接初始化就不是无关紧要的了。

vector<int>v(10);        //正确,直接初始化

vector<int>v = 10;         //错误,接受大小的参数是explicit的

析构函数

构造函数的初始化部分是按照他们在类中出现的顺序进行初始化,析构函数是按照构造的逆序进行销毁。

高放的c++学习笔记之类的更多相关文章

  1. 高放的python学习笔记之基本语法

    python与c++的不同之处 python的语句块不是用{}括起来的而是冒号后面跟一些与比当前语句多一的tab缩进的语句. 1.定义变量 python的变量类型不需要人为指出,会根据赋值的类型决定此 ...

  2. 高放的c++学习笔记之模板与泛型编程

    函数模板 作用 有很多时候参数的类型以及返回值的类型是可变的,我们通过定义模板来让函数能更灵活的运用. 我们设计一个比较函数,如果能比较的两个参数是int型的,两个参数也可能都是string型的,单独 ...

  3. 高放的c++学习笔记之重载运算与类型转换

    ▲基本概念 (1)重载运算符是具有特殊名字的函数,它们的名字又operator和其后要定义的运算符号共同构成.. (2)对于一个运算符号来说它或者是类的成员,或者至少含有一个类类型的参数. (3)我们 ...

  4. 高放的c++学习笔记之函数基础

    局部变量 函数里面的局部变量有普通的局部变量和局部静态变量两种. 普通局部变量变量就是正常定义在函数体内部的变量,如果返回局部变量的地址,以便于函数调用结束后还继续访问此变量的话,编译器会报warni ...

  5. 高放的c++学习笔记之关联容器

    标准库提供8个关联容器 按关键字有序保存有(红黑树实现) set map multset 关键字可重复出现的set multimap  关键字可重复出现的map 无序保存 哈希实现 unorderre ...

  6. 高放的c++学习笔记之lambda表达式

    lambda表达式:可以让代码看起来更整洁,有些结构简单且用的次数少的函数可以用lambda表达式替代, 通常结构是这样的[捕获列表](参数列表){函数部分} 捕获列表: lambda表达式如果在一个 ...

  7. Rancher Server HA的高可用部署实验-学习笔记

    转载于https://blog.csdn.net/csdn_duomaomao/article/details/78771731 Rancher Server HA的高可用部署实验-学习笔记 一.机器 ...

  8. 高可用工具keepalived学习笔记

    keepalived完全遵守VRRP协议包括竞选机制,至于VRRP是什么这里不说了参考http://wenku.baidu.com/link? url=1UbkmHuQlGECgC90P7zF6u2x ...

  9. Java马士兵高并发编程视频学习笔记(二)

    1.ReentrantLock的简单使用 Reentrant n.再进入 ReentrantLock 一个可重入互斥Lock具有与使用synchronized方法和语句访问的隐式监视锁相同的基本行为和 ...

随机推荐

  1. 使用C#的自定义事件

    public class CarDealer { public Action<string> NewCarInfo; //使用系统定义的泛型委托 public void NewCarCom ...

  2. 浏览器的模式问题 Quirks Mode vs Standards Mode

    当微软开始产生与标准兼容的浏览器时,他们希望确保向后兼容性.为了实现这一点,他们IE6.0以后的版本在浏览器内嵌了两种表现模式: Standards Mode(标准模式或Strict Mode)和Qu ...

  3. 一个关于多线程和DbHelper的问题

    我的初衷是这样的:在多线程环境下,每个数据库编号对应一个DbHelper对象. 下面是代码,不知道这样写有什么问题. namespace TestDAL { public class DB { pri ...

  4. poj 2492A Bug's Life

    http://poj.org/problem?id=2492 #include<cstdio> #include<cstring> #include<algorithm& ...

  5. redis 源码分析

    参考: http://redisbook.readthedocs.org/en/latest/index.html http://www.databaseskill.com/3421161/ The ...

  6. thickbox 关于动态生成 无法跳出弹出框的问题

    问题描述: 用jQuery动态生成thickbox的连接代码,发现没有效果. 原因: thickbox在页面加载后,会给a,input,area等绑定弹出事件. 通过tb_init(’a.thickb ...

  7. Apache安装完服务没有安装的情况

    安装完apache之后(不是按照默认路径安装的,例如是 D:\ )右下方哪个小羽毛图标是没有启动的,左键不好使,而且提示“No services installed”,提示服务器没有被安装.解决方法: ...

  8. Hadoop操作hdfs的命令【转载】

    本文系转载,原文地址被黑了,故无法贴出原始链接. Hadoop操作HDFS命令如下所示: hadoop fs 查看Hadoop HDFS支持的所有命令 hadoop fs –ls 列出目录及文件信息 ...

  9. 线性表(gcc实现)

    线性结构: ①存在一个唯一的被称为“第一个”的数据元素: ②存在一个唯一的被称为“最后一个”的数据元素: ③除第一个元素外,每个元素均有唯一一个直接前驱: ④除最后一个元素外,每个元素均有唯一一个直接 ...

  10. Git详解之二 Git基础

    Git 基础 读完本章你就能上手使用 Git 了.本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到的也就是这几个命令.读完本章,你就能初始化一个新的代码仓库,做一些适当配置: ...