C++容易忘记的知识点-第一篇

1.类是抽象的,不占用空间;对象是实例,所以是占用空间的。

2.结构体和类的不同之处?

实际上两者只有关键字不同,与默认的成员的访问权限不同而已,同时在C++的结构体中,可以定义成员函数;小细节:struct在定义完一个类型之后,需要在最后加上;,而class不需要。

3.关于成员函数的注意点

  1. 成员函数与一般函数的区别,属于类的成员,出现在类体中(private,protected,public);
  2. 成员函数可以在类体中定义,也可以在类外定义;类外定义的话,类体的位置应在函数定义之前,否则会编译出错,类外定义的方式 void 类名 ::成员函数名(){}
  3. 类的声明一般都定义在.h文件中
  4. 静态成员
  • 静态数据成员:为类的对象提供一种相互通信的方式,拥有一块单独的存储区,静态数据成员必须在类外定义一次,同时必须是在类的对象实现文件中,不可以在头文件中,不然重复调用头文件的情况下,就会导致重复定义的错误,静态数据成员被类得所有对象所共享,包括该类的派生类的对象;Note:只要在类中定义了静态数据成员,即使不定义对象,也要为这个成员分配了空间,它可以被引用。
  • 静态成员函数:定义方式 static int volume(),静态成员函数是用来处理静态成员变量,静态成员函数不属于某一个对象,送一静态成员函数没有this指针,也就是无法调用非静态成员,这就是跟非静态成员函数的区别。如果一定要引用非静态数据成员的话,加对象名和成员运算符.,如果要在类外调用该函数的话,可以通过以下两个方式:
  1. 类调用 类名::函数名()
  2. a.volume() 此处的a不是对象,只是用a的类型而已,也就是类。

4.构造函数与析构函数

  • 构造函数用来初始化数据成员;注意点:构造函数必须与类名一致;构造函数分为带参数的构造函数还有不带参数的构造函数;C++还提供了一种初始化数据成员的方法:参数初始化表;本来按照构造函数的编写方式为
    class Circle{
    public:
        Circle(int r);    
    private:
        int radius;
    }
    Circle::Circle(int r){
        radius=r;
    }
    //也可以定义为
    Circle::Circle(int r):radius(r){}

    一个类中可以定义多个构造函数,这就是构造函数的重载,重载的意思就是函数名一样,但是参数不一样,但是建立对象时,都只执行其中一个构造函数

  • 派生类的构造函数,构造派生类的构造函数必须对基类数据成员,新增数据成员和成员对象的数据成员进行初始化
  1. 对基类成员和子对象成员的初始化必须在成员初始化列表中进行;
  2. 先调用基类构造函数;再调用子对象构造函数;最后调用派生类的构造函数体

构造函数不可以作为虚函数:虚构函数需要对象在定义的情况下,但是构造函数还没定义,就没有对象这一说法

  • 析构函数:析构函数的名字就是在类名前面加~,不需要用户来调用,对象声明周期结束后就会自动执行,析构函数不是删除对象,而是释放内存 new是建立对象 delete是释放对象
  • 关于构造函数还有析构函数的调用顺序
  1. 关于无继承的情况下:构造函数先声明先调用,析构函数后声明后调用
  2. 关于有继承的情况下:构造函数:先调用基类,子对象,派生类;析构函数:反着来

类的继承写法

派生类中是不能访问基类的私有成员,采用保护继承方式,在派生类外是无法访问派生类中的任何成员的,所以一般采用公用继承。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值