1.注意:函数指针前面*,&都是一样的没啥实际意义,除了把实例化函数块的时候,需要指针或者引用修饰  

 cout << typeid(my1.show).name() << endl;

cout << typeid(&my::show).name() << endl;

直接调用成员函数和通过对象调用成员函数类型是不一样的

void __cdecl(void)

void (__thiscall my::*)(void)

成员函数赋给函数指针,不能使通过对象函数传,必须得走类函数走法

myclass my1; myclass*pmy = &my1;                         (my1.*p)();调用这个指针的时候,还是必须得通过对象走

void(myclass::*p)(void) = &myclass::show;             (pmy->*p)();

总结:绑定的时候使用类的性质,调用的时候是用的对象走

2.类成员函数指针,包含了this指针,必须明确谁来调用

int(myclass::*p[4])(int, int) { &myclass::add, &myclass::sub, &myclass::mul, &myclass::divv };//栈上的调用

p = new (int(myclass::*[4])(int, int)){ &myclass::add, &myclass::sub, &myclass::mul, &myclass::divv };//堆上的调用

(pclass->*p[i])(100, 10)  是一个整体

int(myclass::**pp)(int,int)= int(myclass::*p[4])(int, int)

**pp=*p[]   多的这个*就是指向由[]构成的数组的地址

重点注意:数组的[]一定是跟在名字的后面

3.数组原本是常量,当传参的时候才是数组才转换为指针,才能有所谓的++;

4.类成员可以用=或{}进行赋值

嵌套类初始化,是指针类就new()初始化,是类就直接调用初始化

嵌套的子类要是共有的就可以通过外类::该类()

5.委托构造函数:实现迭代式开发,参数的重重递增,功能的层层递加,

从整体上看,多的参数是有少的参数的构造函数组合而成的,有点递归的感觉

6.const的类对象,只能调用带const的方法,无法修改数据

常量对象:必须初始化而且之后不可以修改,可以通过const_cast<>()进行强转,间接修改

const这种成员初始化的时候,要么在成员声明那里直接赋值,要么就在构造函数初始化列表进行初始化

Const不适用于构造和析构

7.构造函数:有成员数据必须在里面初始化或者构造初始化,不搞没()

8.就对象而言:const 类 *p   指向常量对象的指针

类 *const
p   指向变量的常量指针

Mutable消除const属性

9.拷贝构造:myclass(const
myclass & my)可以任意加参数进行额外操作(也只是在new了数据成员才有)

返回的副本机制,参数值传递,初始化拷贝构造

10.注意打印地址的时候要(void *)转换一下

要使用C语言的字符串函数加#include<cstring>

一个类是描述性的,成员数据是描述该类属性的,那么构造参数传进来的是描述的对象一定是先进行拷贝,然后对对象进行解析,赋值成员。只要是跨区的操作,就别想着单纯的使用指针去对应,这样不安全也不稳定

11.只要构造分配的是数组,那么析构就对应的指针进行delete[] p对应

13.空字符在字符串中的处理:普通的定义不用去管多分配一个空字符(系统已经帮你),但是想strlen()这种返回的数量是不记录空字符的,那么在动态创建的时候就得+1

14.你得记住,在传参是为了初始化一个类的属性指标的时候,要的绝对不是对原数据指针上的掌控,而是把这个数据完完整整的拷贝下来,然后再进行属性上的配对*************************************************************

传的是你这个类需要的东西,你就必须深拷贝下来,原则

跨区使用的数据基本要考虑是不是要把数据拷贝下来再进行处理,

15. 其实深拷贝就再是初始化一次,只是参数必须是类对象

注意:类的内部有指针分配内存,需要深拷贝,否则浅拷贝

拷贝构造函数用于类对象之间的初始化的时候使用

赋值运算符:类对象之间进行赋值的时候用到的

拷贝和赋值时两个不同的阶段

16.由构造函数触发的类型转换,类型转换是可以自定义的

不同的类类型可以往不同的类类型进行转换(原理就是依据构造函数来的,只要你类的数据类型能够满足那个类的构造函数即可)

本质:其实类之间的关系完全是依据成员数据产生的关系,

不同的类类对象之间依据成员数据产生转换关系,因为对象这东西只有成员数据是独有的,成员函数代码块都是共享的

相同类类之间是成员函数代码块是共享的。

一个类所谓的初始化就是只要你能把他的数据成员都初始化,那么你就是可以往这个类上转换的类,毕竟成员函数在共享区

17.类的声明提升作用域,指针或者引用适用,不能直接干对象(对象是需要你完全定义好了的)

引用作为成员数据,只能默认初始化

18.静态类成员数据不能默认初始化,用途:用于同类对象的通信

静态变量的大小就不再类里面,在静态区

19.静态函数无法使用this,创建静态函数的指针的时候也不需要myclass::

类中的静态函数不需要依托对象才能调用,直接就是myclass::show();

静态函数无法使用this,成员数据,成员函数

用途:1.把一个类型的函数归类到一个功能类中,像引用一个命名空间就能调用它

2.可以静态的数据和成员函数相互配合:数据负责存储对象的this*,然后传给静态函数进行类的相关操作

3.直接静态成员函数单干,把this*当参数传进去

(所有的这些,涉及到了类指针,自然独立性也会受到限制)

静态函数配合静态变量(管理对象数量和批量操作)

类的函数是可以调用静态的,所以可以用来在类函数中做标记,计数等等

通过把类的对象指针当参数传进去

对每个对象进行公操作,公纪录,公使用

C++学习-8的更多相关文章

  1. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  2. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  3. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  4. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. Unity3d学习 制作地形

    这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...

  7. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  8. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

  9. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

  10. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

随机推荐

  1. Java经典编程题50道之二十五

    一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. public class Example25 {    public static void main(Stri ...

  2. 分布式缓存一致性hash算法理解

    今天阅读了一下大型网络技术架构这本苏中的分布式缓存一致性hash算法这一节,针对大型分布式系统来说,缓存在该系统中必不可少,分布式集群环境中,会出现添加缓存节点的需求,这样需要保障缓存服务器中对缓存的 ...

  3. Centos环境下给PHP7.0安装yaf扩展

    首先要知道PHP的安装目录在哪里,以我当前的路径为例,在/usr/local/php目录下. 下一步需要下载扩展包,进入http://pecl.php.net/package/yaf寻找符合版本要求的 ...

  4. 第二十一章 Django的分页与cookie

    第二十一章 Django的分页与cookie 第一课 模板 1.模板的继承 在Template目录下新建模板master.html <!DOCTYPE html> <html lan ...

  5. Android动态加载技术(插件化技术)

    No1: 插件化技术的好处: 1)减轻应用的内存和CPU占用 2)实现热插拔,即在不发布新版本的情况下更新某些模块 No2: 插件化方案必须要解决三个基础性问题:资源访问.Activity生命周期的管 ...

  6. hdu1556 Color the ball 线段树区间染色问题

    都是老套路了,如果n=5,要把区间[1,4]染色,可以递归去染区间[1,3]和区间[4,4],如果区间相等就自加,不相等继续递归寻找对应区间. 打印结果时,把所有到达叶节点包含i的区间值相加,就是最后 ...

  7. AGC012 - E: Camel and Oases

    原题链接 题意简述 沙漠中有个排成一条直线的绿洲,一头储水量为的骆驼. 骆驼有两个操作: 走到距离在V以内的一个绿洲. 飞到任意一个绿洲,但V减少一半.V=0时不能飞. 问骆驼依次从每个绿洲出发,能否 ...

  8. JavaScript基础教程1-20160612

    1.javascript是一门浏览器运行的脚本语言和java没关系 2.javascript语言写在哪里? (1)可以写单独的文件里面去调用(推荐采用此方法) index.html <head& ...

  9. 前端JS面试题汇总 Part 3 (宿主对象与原生对象/函数调用方式/call与apply/bind/document.write)

    原文:https://github.com/yangshun/front-end-interview-handbook/blob/master/questions/javascript-questio ...

  10. Caffe可视化之VisualDL

    Visual DL是由 PaddlePaddle 和 ECharts 合作推出的一款深度学习可视化工具,其能够可视化scalar.参数分布.模型结构.图像等.底层采用C++编写,上层SDK以pytho ...