endl; } }; void Cfather::show() { cout << name << " " << sex << " " << num << endl; } class Cson : public Cfather { string clas; string school; public: //子类构造函数 Cson(int num,string name,string //使用初始化列表调用父类构造函数 { this->school = school; this->clas = clas; cout << "子类构造函数" << endl; } ~Cson () { cout << "子类析构函数" << endl; } }; class CGrandson : public Cson { public: CGrandson(int num, private: }; CGrandson::CGrandson(int num, string name, string sex, string clas, string school): Cson
{ int sisters; public: CSon(){} ~CSon(){} }; int main() { CSon son; return 0; } members of CSon: sisters = 0 } (gdb) p /a *(void**)0x4009a0 $5 = 0x40082a <CSon::set()> 看起来内存布局其实跟之前没有区别哈 <CSon::set()> (gdb) p /a *(void**)0x400a90@2 $4 = {0x400938 <CSon::set()>, 0x400944 <CSon::get()>} sex = 0 '\000' }, members of CSon: _vptr.CSon = 0x400ad8 <vtable for CSon+24>, sisters = 0 } (gdb) p /a *(void**)0x400ad8@2 $4 = {0x40095a <CSon::set()>, 0x40096e <CSon::get()>} 看一下跟之前有啥区别呢
; } }; int main() { CSon son; return 0; } 编译后执行结果如下: call base constructors call son :public CPtr { public: CSon() { cout << "call CSon constructors" << endl ; delete son; return 0; } 编译执行后结果如下: call CPtr constructors call CSon constructors call son function 也就是说,对于子类而言,在构造函数中调用虚函数也是调用的它自身的函数,而当子类没有实现的时候才调用父类的虚函数,这一幕是不是很熟悉,实际上就是发生了多态的效果,通过gdb跟踪CSon 的构造函数,输出当前对象的数据,如下: (gdb) p *this $2 = (CSon) {<CPtr> = {_vptr.CPtr = 0x400dd0 <vtable for CSon+16>},
使用CSON来配置 所有Atom的配置文件(除了你的样式表和初始脚本)全部用CSON编写,全称是CoffeeScript Object Notation。 就像JSON(JavaScript Object Notation)的名字一样,CSON是一个储存结构化数据的文本格式,表现为由键值对组成的简单对象的形式。 key: key: value key: value key: [value, value] 对象是CSON的基石,由缩进(像上面的文件那样)或者花括号({})描述。 不像CSS的选择器,CSON的键在每个对象中只能重复一次。如果存在重复的键,最后一次出现的那个会覆盖其他所有同名的键。在Atom配置文件中也是如此。 自定义快捷键 Atom从你~/.atom目录中的config.cson文件中加载配置,它含有CoffeeScript格式的JSON,也就是CSON: 'core': 'excludeVcsIgnoredPaths
用于手动建立文件之间的依赖关系 处理JSON cson-loader 加载并转换 CSON 文件 什么是CSON 我们都知道JSON文件,如: { "name":"terrence", "age ":"18", "books":["js","css","html"] } 如果用CSON写同样的内容,则: # 这里是注释 name: 'terrence' age: '18' books: [
实现方法 点击 atom 左上角 Atom->keymap 菜单,此时会打开 keymap.cson 文件。 添加如下代码到 keymap.cson 的文件末尾。
< "我是父类的show函数" << endl; cout << "a:" << a << " b:" << b << " c:" << c << endl; } }; class CSon endl; } }; #include"CParent.h" int CParent::c = 3; int main() { CParent p; p.show(); p.c++; CSon
上例子中的 p 指针对象指向的是 CSon 类对象,所以 p->Fun() 调用的是 CSon 类里的 Fun 成员函数。 上例子中的 r 引用的对象是 CSon 类对象,所以 r.Fun() 调用的是 CSon 类里的 Fun 成员函数。 — — || 04 多态的简单例子 ? A类、B类、E类、D类的关系如下图: ? 输出结果: hello from son // 构造son对象时执行的构造函数 hello from son // 多态 bye from father // son对象析构时,由于CSon类没有bye
进入终端编辑配置文件 vim ~/.atom/keymap.cson 这个文件默认有大段的注释。
深入键表(keymap) 键表文件是以JSON或者CSON编码的文件,其中含有嵌套的哈希表。它们的工作方式像是样式表,但是它们指定匹配选择器的元素的快捷键的作用,而不是应用样式属性。 就像snippets-1.cson和snippets-2.cson。 移除快捷键 当键表系统遇到了以unset!作为快捷键的命令,它就会像没有绑定匹配到当前键位序列一样,继续从它的父节点中寻找。
在你~/.atom目录下的snippets.cson文件,存放了你的所有自定义的代码段,他们会在Atom运行时加载。 如果某一层有重复的键,只有最后的那个会被读到,详见配置CSON。 多行代码段主体 对于长一些的模板,你可以使用"""来使用多行语法。
(可以搜索社区的插件),下面一部分会展示目前比较流行的插件(可以直接点击下载使用) Open Config Folder: 这一块算不上鼠标操作控制,完全是软件的配置文件集合目录 配置文件的后缀是 cson isotope-ui」 安装了看下 算了还是原来的好看…… 图片 插件 插件详细查看另一篇 Post: 优雅地乱玩 Atom-2 设置 快捷键设置 Atom 编辑器支持自定义按键绑定,文件格式是 CSON
写入配置 虽然atom.config的数据在启动时才从~/.atom/config.cson加载,但你可以通过atom.config.set用编程的方式对其写入。
设置编辑器tab键4个空格 可以在config.cson(file-> Open Your Config)里面配置 "*": editor: tabLength: 4 也可以直接在设置用配置也可以在
:把文件拷贝到output目录,并返回相对URL JSON json-loader:默认内置了,用来加载JSON文件 json5-loader:加载并转译JSON 5文件(ES5.1 JSON语法) cson-loader :加载并转译CSON文件 转译 script-loader:在global环境执行JS文件(像script标签一样),里面的require不会被转换 babel-loader:加载ES2015+代码,并用
设置编辑器tab键4个空格 可以在config.cson(file-> Open Your Config)里面配置 "*": editor: tabLength: 4 也可以直接在设置用配置也可以在
JSON json-loader 加载 JSON 文件(默认包含) json5-loader 加载和转译 JSON 5 文件 cson-loader 加载和转译 CSON 文件 ?
virtual void bye() // 虚函数 { cout<<"bye from father"<<endl; } }; // 派生类 class CSon : public CFather { public: CSon() // 构造函数 { hello(); } ~CSon() // 析构函数 virtual void bye() // 虚函数 { cout<<"bye from son"<<endl; } }; 现在,当以下这行被执行时,会发生什么事情: CSon son; 先列出输出结果: hello from father hello from son bye from son bye from father 无疑地会有一个 CSon(派生类) 构造函数被调用 这时候被调用的 hello 是 CFather 内的版本,而不是 CSon 内的版本。 说明,基类构造期间 virtual 函数绝不会下降到派生类阶层。
w=87&h=87&f=jpeg&s=4880] JSON json-loader 加载 JSON 文件(默认包含) json5-loader 加载和转译 JSON 5 文件 cson-loader 加载和转译 CSON 文件 [171f3822cc03d131?
调出切换编码选项 查找和替换 cmd-F 在buffer中查找 cmd-shift-f 在整个工程中查找 代码片段 alt-shift-S 查看当前可用代码片段 在~/.atom目录下snippets.cson