类于对象下

发布时间:2024年01月22日

再识构造函数——初始化列表——成员变量定义的地方

之前我们说:构造函数,对自定义类型会去调用他的默认构造函数,但是如果内置类型也没有写构造函数呢?

这里我们引用出——初始化列表(也是一种构造函数),:开头, ,分割
在这里插入图片描述
2、const 修饰的成员变量,初始化的时候要用初始化列表

3、引用变量初始化的时候要用初始化列表

总结:构造函数中能用初始化列表的经量用初始化列表,初始化列表的初始顺序,是和成员变量的声明顺序一致的,不是和列表顺序一致的

在这里插入图片描述

static 修饰成员

声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用
static修饰的成员函数,称之为静态成员函数。静态成员变量一定要在类外进行初始化

静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区
2. 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明
在这里插入图片描述
在类外面想要拿到静态成员变量的值,需要调用静态成员函数在这里插入图片描述

例题:
在这里插入图片描述
解题:利用静态变量是整个类的变量,那么用这个类创建几个对象,利用静态变量的累加性,就可以实现

class Sum
{
    public:
    Sum()
    {
        _ret+=_i;
        _i++;
    }
   static int Geti()
    {
        return _ret;
    }
    private:
   static int _i;
   static int _ret;
};
int Sum::_i=1;
int Sum::_ret=0;



class Solution {
public:
    int Sum_Solution(int n) {
        Sum arr[n];

        return Sum::Geti();
    }
};

思考:1、静态成员函数可以调用非静态成员函数吗?
不能,因为静态成员函数里没有隐藏的this指针
2、非静态成员函数可以调用静态成员函数吗?
可以,

explicit关键字——防止隐式类型转换

构造函数不仅可以构造与初始化对象,对于单个参数或者除第一个参数无默认值其余均有默认值
的构造函数,还具有类型转换的作用。

两个相近的内置类型发生内置类型转换
在这里插入图片描述
类中只有一个成员变量的对象也可以发生隐式内存转换
在这里插入图片描述
类里虽然有多个成员变量,但是构造函数中有缺省值,只需要传一个参数就能够完成初始化的,对象也可以通过隐式类型转换创建
在这里插入图片描述
而在构造函数的函数名前面加上关键字explicit就可以组织隐式类型转换
在这里插入图片描述

友元

友元函数,——在类外面定义的函数,通过于类里面的相同名的函数声明建立友元关系,那么这个在类外面的函数也可以直接去访问类里面的私有变量
在这里插入图片描述
友元类——把一个类定义成另外一个类的友元,那么在这个类中就可以直接访问另外一个类的私有变量
在这里插入图片描述
友元是单向的,
友元关系不能传递
如果C是B的友元, B是A的友元,则不能说明C时A的友元。

内部类

一个类写在另一个类的里面:与分开写的区别就是,收到另一个类的域的限制,还有就是里面那个类的友元类是外面这个类(相当于里面那个类可以使用外面这个类的私有成员变量)

匿名对象

类名() 如果都早函数是全缺省那么()里就不用传参

文章来源:https://blog.csdn.net/qq2127189274/article/details/135744066
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。