这里指针强转c++更加严格,可编译但是不执行,不用c语言老版本的方式
c和c++初始化数据的区别
int a=5;
int a(5); //c++风格
char *str="1234";
char *str("china"); //c++风格
auto使用了泛型思想,让当前的数成为最符合的数据类型
第四句话可以使用指针的引用来改变指针指向的地址,这里int *是个指针,后面跟个&说明是指针的引用,引用的是pnum这个指针
获取num的类型
让numA的类型为数据db的类型并初始化为10.9,这种思想在java里面叫反射
这里第二行别犯晕,int ra[10]表示一个一维数组,int (&ra)[10](a)表示一维数组的引用,初始化为a数组
用rp做函数指针的引用,初始化为p也即引用p函数指针
本来是输出加函数的内在方法,结果通过函数指针的引用之下jian函数,那么我们在最后加一句输出p(1,2)输出的结果是调用jian函数的内在方法,一个字,猥琐!
指针的引用:
int m_value = 1;
void func(int *&p)
{
p = &m_value;
// 也可以根据你的需求分配内存
p = new int;
*p = 5;
}
int main(int argc, char *argv[])
{
int n = 2;
int *pn = &n;
cout << *pn << endl;
func(pn);
cout << *pn <<endl;
return 0;
}
输出:
2
5
摘自:https://www.cnblogs.com/li-peng/p/4116349.html
double wage[3] = { 1000.0, 2000.0, 3000.0 };
const double *p = wage;
double *pp = const_cast<double *>(p);
*pp = 2;
cout << wage[0]<< endl; //输出为2
这里const限定了指针p指向的内容不可以改变,但是可以用const_cast<double *>来取消const属性,达到修改的目的
int (*s)();
s= a; //这里a是一个函数,而不能写成s=a()
cout << a << endl;
cout << s << endl;
cout << &a << endl;
输出都是一样的
int a=1;
int &b=a; //引用永远是给a起一个别名 那么b=a,&b=&a,地址和值都一样
函数传引用和传值的区别,实参都一样都是把a,b传进去,形参引用用&a接受,值传参用a接受,引用传参交换ab可以交换,但是值传参不能交换ab
返回对象时会自动调用构造函数,但是返回引用没有,效率更高
函数返回引用的时候该引用不能在函数中定义,因为函数返回后引用的生命周期结束了
如果传参是个数组,使用指针,如果传参是个结构,使用引用或指针,如果对象是类,使用引用
函数模板(一般形式)
template <typename AnyType> //采用泛型,这样传参都用泛型类型,typename是数据类型
void Swap(AnyType &a,AnyType &b)
{
}
函数模板(显示具体化形式)
template < > void Swap<job>(job &j1, job &j2)
如果T *arr[] 说明arr数组每个元素是个T类型的指针,每个指针指向T类型的数据
include引入的文件加<>编译器会在标准头文件中找,加“”会在当前文件目录找
在一个文件中定义一个变量,在另一个文件中要想只用它,在新文件中加extern
全局变量和静态变量作用域为整个程序
p2=new(buffer1) chaff; //意思是new一个chaff放到buffer1中,从buffer1中分配空间给chaff
类方法可以访问类的private组件,公有部分的内容构成了设计的抽象部分----公有接口,将数据封装到私有部分中可以保护数据的完整性,这叫数据隐藏,c++通过类是的实现抽象,数据隐藏和封装等oop特性很容易
头文件当中定义了函数,源文件实现函数细节
const放在函数前后区别
1、int GetY() const;
2、const int * GetPosition();
对于1
该函数为只读函数,不允许修改其中的数据成员的值。
对于2
函数返回值不能修改
const Stock & Stock::topval(const Stock &s) const
{
if(.....){
return s // 就像函数形参是引用,实参传对象本身一样,如果函数类型是引用,返回的是对象本身就行
}
else {
return *this; //因为this是Stock的指针,所以返回*this也即对象本身
}
}
不要返回指向局部变量或临时对象的引用,函数执行完毕后,局部变量和临时对象将消失,引用指向不存在的数据,返回对象本身即可
实现time对象的+法运算重载这样:
Time operator+(const Time &t) const; //这里意思是+号左边是个Time类型的右边是个Time类型的值,
//而在实现函数里面创建一个临时Time对象,和传入的引用Time参数做完加法运算后返回临时对象本身
Time operator*(double n) const;
friend Time operator*(double m,const Time &t) //这里是用来重载*运算后又写了一个友元重载&运算,原
//因是对象*整数可以但是整数*对象无法执行,所以友元让其倒过来乘也可以执行
函数模板的覆盖:
例如第一个函数模板可以对所有类型操作,但是下面又定义了一个传入参数为info对象的同名函数,那么如果函数传入info对象时,就自动执行第二个函数,这叫函数模板的覆盖
using和typedef用法一样都是起别名
一个类大小等于里面成员类型大小之和(一个空类占1个字节),类里面的函数不占大小
像百度网盘里面那么多的资源如何进行快速查找呢,我们可以传进文件的时候将它md5加密,把md5序列作为索引,查找时候就二分查找这个索引即可