C++菜鸟进阶——>指针、引用和构造函数初始化

1.    什么是指针,指针在C++怎么使用?

    答:(1)    学习C++的你应该学过C基础,在C语言里指针是:指向同一类型变量地址,比如 int * p = & a;//a是int 型的,那么同理在C++也是一样的,比如类A;A a;A *p = & a;//A就像int  。不过,C++中指针大多是这样使用:A*p =  new A;既然指针是指向一片空间的地址,那么指针p在此就是指向类A的首地址,C++菜鸟进阶——>指针、引用和构造函数初始化_第1张图片可以发现p指向A类在堆区开辟空间的一个首地址,那么p 就以访问A类中所有的成员变量和成员函数,不过最后一定记得在析构函数中delete p;不然会造成内存泄漏,你会发现电脑越来越卡。

    (2)    同样的,在C++中,指针还可以这样使用,类B继承于类A,A * p = new B;C++菜鸟进阶——>指针、引用和构造函数初始化_第2张图片,你看由于p是A类型指针,所以它最多能指到B中的A内容。(希望此图对你有所帮助)指向基类指针如果指向派生类,它指指向自己的那一部分,然而如果派生类指针指向基类就错了,因为它可能访问到不可预知的内存空间,其实简而言之就是B比A大,B指针指向了B比A大的那一部分,恰巧那一部分是没有的。

2.    C++中的引用?

    答:引用明面上称之为一个变量的别名,实质上成为一个受限的指针,因为在编译器底层它还是以指针的形式实现的。C++中用到引用的地方有很多,因为你创建一个指针编译器是要给这个指针开辟地址的,但是引用就不会开辟地址,比如:A *p = & a;那么a的地址是 0X00000000,而p本身的地址是0X00000001,不过p存放了a的地址而已。不过A &m = a; a的地址还是0X00000000,m的地址还是0X00000000,此处a==m,它们是相等的。所以m不占内存,对m的操作就是对a的操作。C++中很多会遇到引用传参,比如:void fun(int &p);//这里有个判断是不是引用的方法,等号左边有取地址符就是引用。这里括号内 int &p = a;//(int a)

还有一点:引用用在重载中要注意一下,重载:同一个类中多个函数名相同,参数不同,通过不同参数来调用,比如void fun(int x)和 void fun(int &x)两个函数,编译器认为是重载,但是一运行就是出错。其实两个是一样的。

3.    构造函数初始化

       答:这的初始化既构造函数的初始化,比如代码举例如下:

class Stu{

public:

    int age;

    int no;

    Stu();//这里有三个构造函数

    Stu(int x , int y);

    ~Stu();

}

Stu::Stu():age(100),no(200){    //age=100,no=200;

    cout << "Stu::Stu()" <

}

Stu::Stu(int x ,int y):age(x),no(y){    // 20传给x,x再传给age,10传给y,y传给no

    cout << "Stu::Stu(int x , int y):age(x)"<

}

int mian (){

    Stu stu1;    //    stu1.age = 100,stu1.no =200;

    Stu stu2(20,10);    //    stu2.age = 20,stu2.no = 10;

    return 0;

}

以上陈述有啥不对的地方欢迎各位大牛批评指正,我就是一菜鸟,正在C++这条康庄大道上微微前行。

你可能感兴趣的:(C++菜鸟进阶——>指针、引用和构造函数初始化)