c++基础知识点二


这里指针强转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序列作为索引,查找时候就二分查找这个索引即可


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值