c++语法回顾
c++
rdadan
这个作者很懒,什么都没留下…
展开
-
多态-虚函数-虚表-虚析构函数
1.虚表 (x86环境)2.子类只重写一部分父类的虚函数的情况#include "head.h"/* * c++的多态通过虚函数 virtual function 来实现 * 虚函数: 被virtual修饰的成员函数 * 只要在父类中被声明位虚函数,子类中重写的函数也自动变成虚函数 * 即子类中可以省略virtual关键字 *//* * 虚函数的实现原理是虚表,这个...原创 2020-03-03 23:02:33 · 207 阅读 · 0 评论 -
多态
1.多态,重写,父类与子类指针,虚函数#include "head.h"//重载:函数名一样,参数不一样//重写(覆盖override):子类继承父类的函数,实现自己的功能// 函数名,返回值,参数都和父类一模一样/* 多态: * 同一操作作用于不同的对象,可以有不同的解释,产生不同的效果 * 在运行时,可以识别真正的对象类型,调用对应子类中的函数 * 但是c+...原创 2020-03-03 02:54:07 · 112 阅读 · 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 · 620 阅读 · 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 · 740 阅读 · 0 评论 -
初始化列表
1.初始化列表1)初始化列表里可以放函数图一中等号右边能放什么,初始化列表的括号里就能放什么2).初始化顺序a.等同于:m_age = m_height;//未知m_height = m_height;//180结果:b.初始化的顺序只和声明时候的顺序有关2. 初始化列表与默认参数的配合使用注:为什么默认参数只能放声明里面??(默认参数从右到左顺序,tes...原创 2020-03-01 16:02:12 · 294 阅读 · 0 评论 -
继承,成员访问权限
一。继承二。继承后的内存布局父类成员变量在前, 子类成员变量在后三。成员访问权限原创 2020-02-17 22:01:17 · 101 阅读 · 0 评论 -
命名空间
原创 2020-02-17 21:11:33 · 71 阅读 · 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 · 150 阅读 · 0 评论 -
构造函数,析构函数
一。构造函数原创 2020-02-17 00:45:31 · 94 阅读 · 0 评论 -
内存空间的布局,malloc ,new
每个应用都有自己的独立空间 ,其内存大小一般有以下几大区域2.堆空间1.malloc/freevoid 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 · 119 阅读 · 0 评论 -
封装
原创 2020-02-16 13:26:56 · 85 阅读 · 0 评论 -
面向对象1--类与对象,this指针
**类**每次创建对象, 都会给成员变量分配内存,不会每次都给函数分配内存(函数每次在编译完后都有自己的内存地址,只有 一份,通过函数地址调用函数)三个函数的地址相同。如果编译器扫描发现某个函数没有被调用,那么这个函数都没有地址调用函数,执行函数代码,其实就是cpu在访问代码区的内存(指令)代码区是只读的函数代码(最终转成机器指令)存储在代码区函数里面的局部变量存储在占空间...原创 2020-02-15 20:44:35 · 149 阅读 · 0 评论 -
汇编_x86_x64
一。汇编的总类二。x64_寄存器1.寄存器与内存通常,cpu会先将内存中的数据存储到寄存器中,然后再对寄存器中的数据进行运输假设,内存中有块红色内存空间的值是3,现在想把他加1,并将结果存储到蓝色内存空间2.64bit下RAX, RBX,RCX, RDX 特定用途的寄存器一个寄存器可存8个字节32bit下叫EAX, EBX, ECX, EDX16位下, AX, BX,...原创 2020-02-13 22:35:25 · 311 阅读 · 1 评论 -
引用 reference
1.定义在c语言中,使用指针pointer可以间接获取,修改某个变量的值原创 2020-02-13 00:13:39 · 161 阅读 · 0 评论 -
const
1。定义const是常量的意思,被其修饰的变量不可修改如果修饰的是类,结构体(的指针),其成员也不可以更改定义常量的时候就需要给其赋值const int age = 10; //age不可以被修改age = 20; //errorstruct Date{ int year; int mon; int day;};cosnt Date d1= (2020, 2, 12);D...原创 2020-02-12 23:27:29 · 69 阅读 · 0 评论 -
内联函数
1.定义使用inline修饰的声明或实现的函数建议声明和实现都增加inline修饰2.特点a.原创 2020-02-12 22:51:18 · 88 阅读 · 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 · 562 阅读 · 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 )//ok2.默认参数的值可以是常量,全局符号(全局变量,函数名)int age = 20;int sum(int ...原创 2020-02-11 23:34:41 · 1684 阅读 · 0 评论 -
函数重载
1.定义a.函数名相同,函数的参数个数不同b.函数名不同,参数的类型/顺序不同注:c语言不支持函数重载返回值类型与函数重载无关,会产生歧义(二义性)调用函数时实参类型的隐式转换也可能产生二义性2.为什么c++支持函数重载?采用了name decoration技术,c++编译器默认会对符号名(入函数名)进行改编修饰, 不同编译器(g++,mfc)有不同的修改规则,函数的内存地址会不一样...原创 2020-02-11 22:55:17 · 124 阅读 · 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 · 87 阅读 · 0 评论