c++:回顾(一)

一、引用

1.从编译器的角度来讲:

引用就是一种升级版的指针。

2.从语法形式来讲:

引用是引用一块已经存在的合法空间

引用变量即是引用空间的变量的别名

指针可以是野指针,他可以指向任何的地方,如果在c++中单纯使用指针,很容易把程序写的不堪入目

指针可以进行无限次的赋值,引用只能被引用一次。

二、动态开辟空间

在c中:

int *pa=(int *)malloc (sizeof(int));//malloc在堆上开辟空间并没有进行初始化

int *pb=(int *)calloc(1,sizeof(int));//calloc 在堆上开辟空间是由初始化的

int *pc=(int *)realloc(pb,sizeof(int)*10);//relloc在堆上开辟空间都是有初始化的

free(pa);

若多次释放会造成doublefree,程序会异常中止

在c++中:new和delete

int *pa=new int;//使用new按类型直接开辟空间,不会初始化数值

int *pa=new int();//()中填写初始化的值,如果不写默认为0

若要动态开辟连续空间:

int *pb=new int[1024];

int *pb=new int[1024]{0};

delete pa;

delete []pb;

三、类中特殊属性的初始化

const修饰的成员对象、类类型对象(没有默认构造函数的对象)、static修饰的成员对象

1.c++中const修饰的变量,必须初始化。类中有自定义类类型(但这个类对象没有默认构造函数供其生成对象),也必须在开辟空间时,进行初始化。

cpp 复制代码
#include <iostream>
using namespace std;

class A{
    A(int a){//有参构造

    }
};
class Stu
{
private:
    string name;
    int age;
    const int id;
    A a;

public:
    // 初始化列表
    // 初始化列表的调用时机:在构造函数调用之前
    // 如果要全部使用初始化列表来完成对类中属性的初始化,需按照顺序
    Stu(string name, int age, int id) : name(name), age(age), id(id),a(1)
    {
        cout << "Stu的有参构造" << endl;
    }
    void show(){
        cout<<"学号:"<<this->id<<"姓名:"<<this->name<<"年龄:"<<this->age<<endl;

    }
};
int main()
{
    Stu stu("zhangsan",20,1001);
    stu.show();
    return 0;
}

2.类中static修饰的类中属性的初始化

cpp 复制代码
#include <iostream>
using namespace std;

class A{
    A(int a){//有参构造

    }
};
class Stu
{
private:
    string name;
    int age;
    const int id;
    A a;
    //静态变量必须在类外完成初始化才能在静态区中分配空间
    //如果没有在类外进行初始化,那么它只是一个声明而已,没有空间
    static int count;

public:
    // 初始化列表的调用时机:在构造函数调用之前
    // 如果要全部使用初始化列表来完成对类中属性的初始化,需按照顺序
    Stu(string name, int age, int id) : name(name), age(age), id(id),a(1)
    {
        cout << "Stu的有参构造" << endl;
        count++;
    }
    void show(){
        cout<<"学号:"<<this->id<<"姓名:"<<this->name<<"年龄:"<<this->age<<endl;

    }
};
//类外对static变量进行初始化
int Stu::count=0;
int main()
{
    Stu stu("zhangsan",20,1001);
    Stu stu1("lisi",30,1002);
    stu.show();
    stu1.show();
    return 0;
}

类中静态属性,如果是public修饰的话,那么也可以直接使用域名访问符的形式直接访问,如Stu::count

并且static修饰的局部变量只能被初始化一次。

相关推荐
IT技术分享社区5 分钟前
C#实战:使用腾讯云识别服务轻松提取火车票信息
开发语言·c#·云计算·腾讯云·共识算法
极客代码8 分钟前
【Python TensorFlow】入门到精通
开发语言·人工智能·python·深度学习·tensorflow
疯一样的码农15 分钟前
Python 正则表达式(RegEx)
开发语言·python·正则表达式
&岁月不待人&37 分钟前
Kotlin by lazy和lateinit的使用及区别
android·开发语言·kotlin
StayInLove40 分钟前
G1垃圾回收器日志详解
java·开发语言
无尽的大道1 小时前
Java字符串深度解析:String的实现、常量池与性能优化
java·开发语言·性能优化
爱吃生蚝的于勒1 小时前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~1 小时前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
binishuaio1 小时前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
zz.YE1 小时前
【Java SE】StringBuffer
java·开发语言