C++相关



一、C++包含头文件有无.h

<.h>表示优先中系统目录中查找 该头文件 好比#include <stdio.h> 这是系统中的
"
.h"表示优先从当前目录中查找 该头文件 好比#include “head.h” 这是你本身写的
(来源网络,源头不知)

二、抽象\封装\继承\多态概念

抽象:数据、行为
封装:将数据和行为(和功能)即操作数据的代码结合,形成类。数据和函数是类的成员。
继承:保持原有类特性基础上,进行更具体详细的说明
多态:一段程序能处理多种类型对象的能力。形式:强制多态、重载多态、参数多态、包含多态
强制多态:类型强制转换
重载多态:
参数多态:
包含多态:类族中不同类中的同名成员函数的多态行为

三、继承与派生、函数重载概念

继承与派生
继承:新的类从已有的类获得已有的特性
派生:从已有类产生新类的过程就是类的派生
原有类称基类、父类 新类称派生类、子类

函数重载
概念:一词多义时,对不同功能赋予相同函数名,编译时根据实参类型和个数来确定使用哪一个具体功能,编译器据其最佳匹配自动确定调用哪一个函数
函数声明:必须包括形参数据类型

四、类的大小

(1)空类:占据一个字节,用于标识这个类是一个空类,没有实际含义
(2)只有成员变量的类:大小为所有普通成员变量所占据的内存大小的和(静态成员变量并不存放在对象的内存空间中)
(3)只有虚函数的类:根据虚函数的实现机制,该类的对象所占据的内存只有一个虚函数表指针(vfptr),指向一个虚函数表,该表按照函数的声明顺序存储着虚函数的函数指针
(4)既有虚函数,又有成员变量的类:类的对象内存中既有虚函数表指针,又有成员变量

五、UML统一建模语言

简洁表示可只写类名(抽象类则书写斜体类名称)
[访问控制属性]名称[重数][:类型][=默认值][{约束特征}]
Public+ Private- Protected#

数据成员
静态:下方添加下划线 -count:int=0
常:数据类型前加const

函数成员
静态:前加<>
友元:前加<>
常:前加<>
虚:前加<>
纯虚:前加<>

六、深复制与浅复制

浅复制
隐含的复制构造函数,被复制对象的所有变量都含有与原来对象相同的值,而所有其他对象的引用仍然指向原来的对象。原来对象变化,也影响了复制的对象,两个对象共用一块内存空间,程序结束之前两对象的析构函数自动被调用,动态分配的内存空间会被两次释放,运行错误。

深复制
编写复制构造函数,被复制对象的所有变量都含有与原来对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制的新对象,而不再是原有的那些被引用的对象。复制构造函数中需要以深复制(而非浅复制)的方式复制该指针成员。

七、友元关系

不同类或对象的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制
一个类主动声明,给其他函数提供对本类的访问特许
友元函数:用friend修饰的非成员函数(可是其他类的成员函数)
此函数可通过对象名访问类的私有和保护成员
friend float dist(…);

友元类:A为B的友元类,则A类所有成员函数都是B类的友元函数,都可以访问B类的私有和保护成员
	class B{
	friend class A;   };

友元关系是单向的,不能传递,不被继承

八、右值

1.含义

左值:看作是一个关联了名称的内存位置,允许程序的其他部分来访问它
纯右值:则是一个临时值,没有标识符无法获取地址的对象,它不能被程序的其他部分访问。
将亡值:跟右值相关的表达式,通常是将要被移动的对象。右值引用T&&的函数返回值,std::move返回值

x = square(5);
34为右值,x、lRef为左值,
表达式 square(5) 是一个右值中的将亡值,代表了一个由编译器创建的临时内存位置,以保存由函数返回的值。该内存位置仅被访问一次,即赋值语句的右侧。在此之后,它就会立即被删除,再也不能被访问了。

2.引用

左值引用:引用通过 & 符号出现在类型与变量的标识符之间指示。
右值引用:使用& & ,右值引用关联到右值时,右值被存储到特定位置,右值引用指向该特定位置,给一个临时内存位置分配一个名称,并且可以将这个临时位置变成一个左值

int x = 34;
int &lRef = x;  //左值引用

int && rRef = square(5);  //即rRef本身变成左值
但右值引用不能绑定到左值上
int && rRefX = rRef;  //rRef不为右值,不会编译
但又能将右值引用赋值给左值引用,该左值引用绑定到右值引用指向的对象
int & rRefX = rRef; 

3.相关函数

Std::move函数

int && rRefX = std::move(rRef); //编译通过,将左值强制转换成右值

Std::forward函数:保持原来的值属性不变。通俗讲,原来的值是右值,经std::forward处理后它还是右值。

template <typename T>
T&& forward(typename std::remove_reference<T>::type& param)
{
    return static_cast<T&&>(param);
}

template <typename T>
T&& forward(typename std::remove_reference<T>::type&& param)
{
    return static_cast<T&&>(param);
}

……

forward实现了两个模板函数,一个接收左值,另一个接收右值,std::forward模板函数对传入的参数进行强制类型转换,转换的目标类型符合引用折叠规则

九、判断指针是否为空两种方式

if (NULL == p) { } 和 if (!p) { }等价

两个条件判断都不需要进行隐式类型转换

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值