类的基本思想是数据抽象封装
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. VS2013程序打包部署(图解),vs2013部署

    VS2013程序打包部署(图解),vs2013部署 首先要说明的是VS解决方案配置下的Debug模式和Release模式有什么区别.Debug模式通常称为调试模式,它包含调试信息,未对代码进行优化,方 ...

  2. java签名证书

    import java.io.FileInputStream; import java.security.KeyStore; import java.security.PrivateKey; impo ...

  3. EDM(邮件营销)

    官冲拉手网CTO举了个EDM(邮件营销)的例子: 在做大数据分析应用之前,通过EDM带来的订单转化率很低.在采用大数据解决方案后,可以根据用户之前的浏览习惯猜测他的喜好和购买习惯,从而针对性的推送个性 ...

  4. HDU Sky数 2079 简单易懂的代码

    题目 http://acm.hdu.edu.cn/showproblem.php?pid=2097 思路 既然要求和 十进制数字各个位数上的和是相同的, 那么16,12进制转换完之后也是10进制表示的 ...

  5. 高质量JavaScript代码书写基本要点学习

    高质量JavaScript代码书写基本要点学习 可维护的代码意味着: •可读的 •一致的 •可预测的 •看上去就像是同一个人写的 •已记录   最小全局变量(Minimizing Globals)   ...

  6. HBase HFile

    HFile index HFile index, which is proportional to the total number of Data Blocks. The total amount ...

  7. 一个ASPX页面的生命周期?

    大家都知道客户端请求一个ASPX页面,通过iis中接收,会被的interinfo.exe进程截取,判断其扩展名,再把请求转交给ASPNET_ISAPI.DLL,通过isapi扩展进入相应的管道处理,转 ...

  8. hyperv虚拟机网络速度慢问题的解决办法

    服务器安装了windows2012R2进行虚拟化,虚拟机也是用的是windows2012R2的操作系统,这样可以一次激活对应的虚拟机. 在使用虚拟机的过程中发现问题,虚拟机主机的网速正常,无论是ftp ...

  9. AngularJS - 基本功能介绍

    转载自:http://www.cnblogs.com/powertoolsteam/p/angularjs-introdection.html (写得很好的Angular入门,可以试试) Angula ...

  10. struct 结构

    //原始套接字学习笔记之代码结构 /* *host端程序结构 */ #include <> #define .. //主函数 int main() { //建立发送线程 pthread_t ...