c++语法回顾
c++
rdadan
这个作者很懒,什么都没留下…
展开
-
多态-虚函数-虚表-虚析构函数
1.虚表 (x86环境) 2.子类只重写一部分父类的虚函数的情况 #include "head.h" /* * c++的多态通过虚函数 virtual function 来实现 * 虚函数: 被virtual修饰的成员函数 * 只要在父类中被声明位虚函数,子类中重写的函数也自动变成虚函数 * 即子类中可以省略virtual关键字 */ /* * 虚函数的实现原理是虚表,这个...原创 2020-03-03 23:02:33 · 215 阅读 · 0 评论 -
多态
1.多态,重写,父类与子类指针,虚函数 #include "head.h" //重载:函数名一样,参数不一样 //重写(覆盖override):子类继承父类的函数,实现自己的功能 // 函数名,返回值,参数都和父类一模一样 /* 多态: * 同一操作作用于不同的对象,可以有不同的解释,产生不同的效果 * 在运行时,可以识别真正的对象类型,调用对应子类中的函数 * 但是c+...原创 2020-03-03 02:54:07 · 121 阅读 · 0 评论 -
父类指针指向子类指针
1.父类指针和子类指针 //1.父类指针 指向 子类指针,继承的方式必须是public #include "head.h" class Person { public: int m_age; }; class Student : public Person { public: int m_score; }; int main() { //1.父类指针 指向 子类指针,继承的方式必须是p...原创 2020-03-03 02:51:54 · 632 阅读 · 0 评论 -
父类的构造函数
#include "head.h" class Person { public: Person() { cout << "Person::Person()" << endl; } Person(int age) : m_age(age) { cout << "Person::Person(int age)" << endl; ...原创 2020-03-01 19:09:34 · 768 阅读 · 0 评论 -
初始化列表
1.初始化列表 1)初始化列表里可以放函数 图一中等号右边能放什么,初始化列表的括号里就能放什么 2).初始化顺序 a. 等同于: m_age = m_height;//未知 m_height = m_height;//180 结果: b. 初始化的顺序只和声明时候的顺序有关 2. 初始化列表与默认参数的配合使用 注: 为什么默认参数只能放声明里面?? (默认参数从右到左顺序,tes...原创 2020-03-01 16:02:12 · 321 阅读 · 0 评论 -
继承,成员访问权限
一。继承 二。继承后的内存布局 父类成员变量在前, 子类成员变量在后 三。成员访问权限原创 2020-02-17 22:01:17 · 106 阅读 · 0 评论 -
命名空间
原创 2020-02-17 21:11:33 · 78 阅读 · 0 评论 -
声明和实现分离
Person.h文件 class Person { private: int m_age; public: void setAge(int age); int getAge(); Person(); ~Person(); }; Person.cpp文件 #include "Person.h" void Person::setAge(int age) { m_age = age; }...原创 2020-02-17 14:07:44 · 156 阅读 · 0 评论 -
构造函数,析构函数
一。构造函数原创 2020-02-17 00:45:31 · 100 阅读 · 0 评论 -
内存空间的布局,malloc ,new
每个应用都有自己的独立空间 ,其内存大小一般有以下几大区域 2.堆空间 1.malloc/free void test() { int *p = (int *) malloc(4); *p = 10; /*char *p = (char *) malloc(4); p[0] = 10; p[1] = 11; p[2] = 12; p[3] = 13;*/ /* *p = ...原创 2020-02-17 00:12:17 · 125 阅读 · 0 评论 -
封装
原创 2020-02-16 13:26:56 · 91 阅读 · 0 评论 -
面向对象1--类与对象,this指针
** 类 ** 每次创建对象, 都会给成员变量分配内存,不会每次都给函数分配内存(函数每次在编译完后都有自己的内存地址,只有 一份,通过函数地址调用函数) 三个函数的地址相同。如果编译器扫描发现某个函数没有被调用,那么这个函数都没有地址 调用函数,执行函数代码,其实就是cpu在访问代码区的内存(指令) 代码区是只读的 函数代码(最终转成机器指令)存储在代码区 函数里面的局部变量存储在占空间 ...原创 2020-02-15 20:44:35 · 174 阅读 · 0 评论 -
汇编_x86_x64
一。汇编的总类 二。x64_寄存器 1.寄存器与内存 通常,cpu会先将内存中的数据存储到寄存器中,然后再对寄存器中的数据进行运输 假设,内存中有块红色内存空间的值是3,现在想把他加1,并将结果存储到蓝色内存空间 2. 64bit下 RAX, RBX,RCX, RDX 特定用途的寄存器 一个寄存器可存8个字节 32bit下 叫EAX, EBX, ECX, EDX 16位下, AX, BX,...原创 2020-02-13 22:35:25 · 349 阅读 · 1 评论 -
引用 reference
1.定义 在c语言中,使用指针pointer可以间接获取,修改某个变量的值原创 2020-02-13 00:13:39 · 187 阅读 · 0 评论 -
const
1。定义 const是常量的意思,被其修饰的变量不可修改 如果修饰的是类,结构体(的指针),其成员也不可以更改 定义常量的时候就需要给其赋值 const int age = 10; //age不可以被修改 age = 20; //error struct Date { int year; int mon; int day; }; cosnt Date d1= (2020, 2, 12); D...原创 2020-02-12 23:27:29 · 76 阅读 · 0 评论 -
内联函数
1.定义 使用inline修饰的声明或实现的函数 建议声明和实现都增加inline修饰 2.特点 a.原创 2020-02-12 22:51:18 · 100 阅读 · 0 评论 -
extern "C",头文件重复包含,#pragma once
1.用c语言的方式编译代码 也可以这样用,用大括号将声明括起来 2.如果函数同时有声明和实现,要让函数声明被extern “C” 修饰,函数实现可以不修饰 函数声明加extern C加修饰 3.函数重载,一个加,一个不加,ok 一个用c方式编译,一个用c++编译, 可以重载,ok 完全相同函数,一个加一个不加, 会产生二义性,报错 2.c, c++混合开发时,可能会用一下操作 如c++开...原创 2020-02-12 01:03:09 · 611 阅读 · 0 评论 -
默认参数
如: int sum(int v1 = 4, int v2 = 6) { return v1 + v2; } 1.默认参数只能从右到左的顺序,严格按照顺序 int sum(int v1 = 4, int v2 )//错误 int sum(int v1 , int v2 = 6 )//ok 2.默认参数的值可以是常量,全局符号(全局变量,函数名) int age = 20; int sum(int ...原创 2020-02-11 23:34:41 · 1714 阅读 · 0 评论 -
函数重载
1.定义 a.函数名相同,函数的参数个数不同 b.函数名不同,参数的类型/顺序不同 注:c语言不支持函数重载 返回值类型与函数重载无关,会产生歧义(二义性) 调用函数时实参类型的隐式转换也可能产生二义性 2.为什么c++支持函数重载? 采用了name decoration技术,c++编译器默认会对符号名(入函数名)进行改编修饰, 不同编译器(g++,mfc)有不同的修改规则,函数的内存地址会不一样...原创 2020-02-11 22:55:17 · 130 阅读 · 0 评论 -
前言
一。程序的本质 1.软件/程序执行的过程 硬盘(程序/软件)---装载---> 内存 ---读/写--> CPU-->控制设备 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200210220528233.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10...原创 2020-02-10 22:57:49 · 95 阅读 · 0 评论