React学习笔记(一)前言
React是一个将数据渲染为HTML视图的开源JavaScript库。
数据→视图
React特点
采用组件化模式、声明式编码,提高开发效率和组件的复用率。
在React Native中可以使用React语法进行移动端开发。
使用虚拟dom + Diffing算法,尽量减少与真实dom操作。
虚拟DOM和真实DOM
React提供了一些API来创建一种 “特别” 的一般js对象:
const VDOM = React.createElement('xx',{id:'xx'},'xx')
上面创建的就是一个简单的虚拟DOM对象;
虚拟DOM对象最终都会被React转换为真实的DOM;
只需要操作react的虚拟DOM相关数据, react会转换为真实DOM变化而更新界。
Hello React12345678910111213141516171819202122<!DOCTYPE html><html lang="en"><head> < ...
C++学习笔记(七)类和对象——运算符重载
运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型
加号运算符重载
实现两个自定义数据类型相加的运算。
对于内置的数据类型的表达式不能改变。
不能滥用运算符重载。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152#include<iostrean>#include<string>using namespace std;class Person{public: // 1、成员函数实现重载加号 Person operator+(Person &p){ Person tmp; tmp.m_a = this.m_a + p.m_a; tmp.m_b = this.m_b + p.m_b; return tmp; } int m_a; int m_b;};/ ...
C++学习笔记(七)类和对象——友元
目的:让一个函数或者类访问另一个类中私有成员
关键字:friend
实现:
全局函数做友元
类做友元
成员函数做友元
全局函数做友元123456789101112131415161718192021222324252627#include<iostrean>#include<string>using namespace std;class Building{ // 全局函数作为友元 friend void GoodGay(Building *building)public: Building(){ m_livingroom = "客厅"; m_bedroom = "卧室"; }public: string m_livingroom;private: string m_bedroom;}void GoodGay(Building *building){ cout << building- ...
C++学习笔记(七)类和对象——C++对象模型和this指针
成员变量和成员函数分开存储
成员变量和成员函数市分开存储的。
非静态成员变量,属于类对象;静态成员变量,不属于类对象。
静态成员函数和非静态成员函数均不属于类对象。
this指针
this指针指向被调用的成员函数所属的对象
每个非静态成员函数内都有this指针。
this指针不需要定义,直接使用。
用途:
当形参和成员变量同名时,可以用this指针来区分
在类的非静态成员函数中返回对象本身,可使用return *this
12345678910111213141516171819202122232425262728#include<iostream>using namespace std;class Person{public: int age; Person(int age){ this->age = age; } Person& PersonAddAge(Person &p){ this->age += p.age; re ...
C++学习笔记(七)类和对象——对象的初始化和清理
构造函数和析构函数
构造函数:用于初始化;
析构函数:用于清理。
编译器会自动调用,用于完成对象初始化和清理工作。
如果不提供以上两者,那么编译器会提供,但编译器提供的构造函数和析构函数是空实现。
构造函数语法:类名(){} * 构造函数没有返回值也不写void; * 函数名与类名相同; * 构造函数可以有参数,因此可以发生重载; * 程序在调用对象是会自动调用构造函数,无需手动调用,且只会调用一次。
析构函数语法:~类名(){} * 析构函数,没有返回值也不写void; * 函数名与类名相同,同时在名称前加上~; * 构造函数不可以有参数,因此不可以发生重载; * 程序在对象销毁前会自动调用析构,无需手动调用,而且只会调用一次。
12345678910111213141516171819202122232425#include<iostream>using namespace std;class Person{public: // 构造函数 Person() ...
C++学习笔记(七)类和对象——封装
封装的意义
将属性和行为作为一个整体来表现生活中的事物。
将属性和行为加以权限和控制。
设计一个圆类,求圆的周长。
1234567891011121314151617181920#include<iostream>using namespace std;#define PI 3.14;class Circle{ // 访问权限public: // 属性 int m_r; //行为 double calculate2C(){ return 2 * PI * m_r; }}int main(){ Circle c1; c1.m_r = 10; cout<< "圆的周长为"<< c1.calculate() <<endl;// 圆的周长为26.8 return 0;}
设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号。
12345678910111 ...
C++学习笔记(七)类和对象
C++面向对象的三大特性:封装、继承、多态。
C++认为万事万物都皆为对象,对象上有其属性和行为。
具有相同性质的对象,可以抽象为类。
一、封装二、对象的初始化和清理三、C++对象模型和this指针四、友元五、运算符重载
C++学习笔记(六)函数提高
函数默认参数
函数的形参可以有默认值。
语法:返回值类型 函数名(参数 = 默认值){}
12345678int sum(int a,int b = 20,int c = 30){ return a + b + c;}int main(){ cout<<sum(10)<<endl;// 60 cout<<sum(10,30,40)<<endl;// 80 return 0;}
注意事项:
如果某个位置已经有了默认参数,那么从这个位置起,从左往右都必须有默认值。
如果函数声明有默认参数,函数实现就不能有默认参数。
函数占位参数
C++函数的形参列表里可以有占位参数,用来占位,调用函数时必须填补该位置。
语法:返回值类型 函数名(数据类型){}
占位参数可以有默认参数。
12345678void func(int a,int = 10){ return 'Hello World!'; ...
C++学习笔记(五)引用
引用的基本使用
作用:给变量起别名。
语法:数据类型 &别名 = 原名。
1234int main(){ int a = 10; int &b = a;}
注意事项
引用必须初始化。
int &b;//错误的
引用初始化后不可被修改。
引用做函数参数
作用:函数传参时,可以利用引用的技术让形参修饰实参。
优点:可以简化指针修改实参。
1234567891011void swap(int &a,int &b){ int temp = a; a = b; b = temp;}int main(){ int a = 10; int b = 20; swap(a,b); return 0;}
引用作函数返回值
不要返回局部变量的引用。
12345678910int& test(){ int a = 10; return a;}int main(){ int &re ...
C++学习笔记(四)内存分区模型
分类
C++程序在执行十,将内存方向大致分为4个区域:
代码区:存放函数体的二进制代码,由操作系统管理;
全局区:存放全局变量和静态变量以及常量;
栈区:由编译器自动分配释放,存放函数的参数值、局部变量等;
堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。
内存四区的意义
不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活性。
程序运行前
在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域
代码区
存放CPU执行的机器指令;
特点:
代码区是共享的。共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可;
代码区是只读的。使其只读的原因是防止程序意外地修改了它的指令。
全局区
全局变量和静态变量存放在此。
全局区还包含了常量区,字符串常量和const修饰的全局常量也存放在此。
该区域的数据在程序结束后由操作系统释放。
变量
局部变量:写在函数体内的变量。
123int main(){ int a = 10;}
全局变量:没有写在函数体内的变量。
1234int g_a = 10;in ...