C++部分笔记

c++
引用 : &p=x ; // int *p =x;
引用在第一次的时候需要赋值,定义成x的引用后就不能改了
void 类型没有引用
static :
修饰的函数或者全局变量,只限定于在本文件可以用
在类中表示唯一实例
const:
在变量定义的时候必须赋初值,之所以引入const就是为了取代define ,因为用#define 容易出问题
例如:const int* a; const 修饰的是 int* 那么int* 就不能改,例如b=10,c=20;
const int* a=&b,则*a=10; a=&c ;则*a=20; 但是不能用 *a=c 来修改值。
(修饰的 int* ,那么不能用*a 来修改,可以用 a来修改)
例如: int* const a;const 修饰的是 a 那么a就不能改,同样b=10,c=20;
int* const a=&b; *a=c;则*a=20;,但是不能用a =&c 来修改。
(修饰的 a ,那么不能用a 来修改,可以用 *a来修改)
(const修饰的离 '谁' 最近,那么就不能通过 '谁' 来修改)
类型转换:
float a=(float)200; 或者float a=float(200);

reinterpret_cast: 重新定义,可以转换成任意一种类型。包括void*
例如:A a;
int* p = reinterpret_cast<int *>(&a); // 将A类型的a变量强转成int 型。
dynamic_cast 用来转换一个类的指针,类的引用或者void*


对象成员的初始化:直接调用子对象的构造函数:Public():leader(i,j) //用的是初始化列表
C++中不支持仅依靠返回值来重载
函数重载:是编译器偷偷的将函数名修改了,默认参数是编译器偷偷的将参数补齐
函数在申明时,参数可以没有名字,但是得有类型
const:在定义的时候必须赋初值。为什么?因为const在定义变量的时候是不会分配空间的,赋初值就是
强制编译器去分配空间存储初始值。


static成员函数 只能引用static的成员变量,不能引用其他的非static成员函数


引用 & 一般用在函数的参数 或返回值;
当 引用作为函数返回值的时候,不能返回一个局部变量,因为函数执行完了 就会栈区回收,所以返回值一般定义为一个
static类型的 变量。

常量引用:在传递常量的时候,用const int & 来接收

对象赋值的时候不会调用构造函数,但是会调用拷贝构造函数(参数是一个对象的引用)

临时对象:当一个函数调用了后,但是没有值来接受这个函数的返回值,编译器就会创建一个临时对象来接收
这个函数的返回值,这个临时对象也会调用构造函数,语句执行完后,临时对象会被析构

拷贝构造:Classname(const Classname & who){}

拷贝构造很麻烦,如何避免不用拷贝构造,不用值传递,使用引用。


成员对象的地址是通过 相对于对象的首地址的偏移来描述的。因此要用成员对象的指针,类中没有
地址这个概率 int Class::*p = &Class:: a;


组合:用一个已经存在的类作为一个类的成员 has a 的关系

继承:三种继承方式


钻石型继承:用虚基类来确定唯一性

虚基类及其派生类构造函数:
1建立对象时所指定的类称为最远派生类。
2虚基类的成员是由最远派生类的构造函数通过调用虚基类的构造函数初始化。
3在整个继承结构中,直接或间接继承虚基类的所有派生类,都必须在构造函数
的成员初始化列表中给出对虚基类的构造函数的调用,如果未列出,则表示调用
虚基类的默认构造函数。


多态:概念:程序在编译的时候不知道是什么类型,只有在运行的时候才知道是什么类型
后绑定性。多态是面向对象的重要特性之一。
多态是指发出同样的消息被不同类型的对象接受时,可能导致完全不同的行为。
多态的实现:

静态绑定:是在程序编译的时候。
动态绑定:是在程序执行的时候。

虚函数:
是动态绑定的基础,是非静态的成员函数,在类的声明中,在函数原型之前写 virtual。virtual只用来说明类声明中的原型,不能用在函数的实现时。
具有继承性,基类中声明了虚函数,那么派生类无论是否说明,同原型函数
自动为虚函数。
调用方式; 通过基类的指针或引用,执行时会根据指针指向的对象的类,决定
调用哪个函数。

猜你喜欢

转载自www.cnblogs.com/Theshy-vn/p/12024021.html