Disposition partielle des points de connaissance C++

1. Introduction

C++ quelques connaissances en tri, la vidéo est
Qianfeng Education_C++ Complete Video Tutorial (facile à comprendre) (https://www.bilibili.com/video/BV1z5411p7Xh?p=53&spm_id_from=pageDriver&vd_source=de2dcd0f37ff916ec3f8fb83c6366123)

2. Points de connaissance

Le constructeur de copie
consiste à copier toutes les valeurs de l'objet b vers a pour une simple copie de valeur, ce qui est similaire à la construction avec paramètres, mais la source de données est différente

person (const person& c){
    
    

}
person a(b)

Un objet anonyme, un objet sans nom, ne peut pas utiliser un objet anonyme pour appeler la construction de copie

// 显示调用构造函数
// 相当于先写了一个匿名对象,然后用p1给他一个名字,在栈中申请内存
person p1 = person();
// 在堆中申请内存
person p1 = new person();
// 隐式调构造函数,一般不用
// 类前面加上explicit就不允许隐式调用了

Quand appeler la construction de copie

// 1. 就对象初始化新对象
person p2 = person(p);// 调用了拷贝构造函数
person p3 = p;// 这个也是调用了拷贝构造函数(隐式调用,隐式调用是把person去掉)
// 2. 传递的参数是普通对象,函数参数也是普通对象,传递i将会调用拷贝构造
void aa(person p){
    
    };
person a;
aa(a);
// 3. 函数返回局部对象
person p; 
return p;

Copie profonde, copie superficielle : seule la copie de la valeur est appelée copie superficielle.

// 浅拷贝拷贝地址时候,两个对象指向的是同一块内存,这就是问题
// 深拷贝有些时候要自己写,
// 值的话直接拷贝,地址需要在申请内存,然后在拷贝数据

Méthode d'écriture de la liste d'initialisation, définir et initialiser selon l'ordre de déclaration

// 原来的那种就是复制的,变量一开始就是定义,而列表写法一开始是声明,声明不分配空间,定义分配空间,声明对象不会调用构造函数,构造调用的也是先构造里面的,在构建外面的
person {
    
    
public: 
	person(int a,int b,int c):m_a(a),m_b(b),m_c(c){
    
    };
	int m_a;
	int m_b;
	int m_c;
}

La mémoire d'application dynamique est entièrement appliquée dans la mémoire de tas.

// c语言中malloc和free不会调用对象对应的构造函数和析构函数,所以要用new和delete
void *p = new person;
delete p;
// 是不会调用析构函数,应该是不清楚数据的大小
// 创建数组,释放时候也要按数组释放的, new和delete要采用相同的形式

Statci est stocké dans la zone de stockage statique, et non dans la zone de tas ou la zone de pile. Il n'y a qu'une seule copie des membres statiques, et cette copie est partagée par tous les objets appartenant à cette classe. La mémoire est allouée lors de la phase de compilation et les membres statiques ne peuvent être déclarés que dans la classe. Vous ne pouvez pas affecter de valeur et vous pouvez accéder directement aux variables membres statiques via la classe (car elles existent déjà avant la compilation). La fonction globale
friend
de la classe est appelée la fonction friend de la classe et vous pouvez accéder aux membres privés de la classe à l'intérieur.
Les fonctions membres statiques ne peuvent accéder qu'aux membres statiques statiques et peuvent également être appelées directement via la classe. Elles sont disponibles au moment de la compilation et les objets de la classe ne sont pas implémentés, de sorte que les autres membres ne sont pas accessibles.

const static int c = 100;// 不可修改的,const修饰的静态成员变量是保存在常量区,不可修改,在内存中只有一份,可以初始化赋值,
// 访问还是和之前一样额,只不过就是不可更改了

Mode singleton
Une classe ne peut instancier qu'un seul objet et ne peut pas instancier plusieurs
insérez la description de l'image ici
variables membres et stockage de fonctions, seules les variables membres ordinaires occupent la mémoire de l'objet, le stockage statique est stocké dans la zone de stockage statique et les fonctions sont stockées dans la zone de code

const fonction membre modifiée

// 这样的话,就不能通过this来修改对象里面的值了
class MyClass {
    
    
public:
    void modifyVariable();               // 非常函数
    void readVariable() const;           // 常函数
};

void MyClass::modifyVariable() {
    
    
    // 修改成员变量的值
}

void MyClass::readVariable() const {
    
    
    // 读取成员变量的值,但不能修改它们
}

Tomomoto

// 如果想要让一个全局函数,或者一个类的成员函数访问另一个类私有成员,只需要声明友元即可
// friend 关键字只出现在声明处
// 其他类,类成员函数,全局函数都可以声明为友元,但是感觉不太好,类外直接更改私有函数不太安全
// 添加友元以后可以直接访问类的私有成员

pointeur intelligent

person *p = new person(10);
Smartpointer sp(new person(10));
// 这种传值的话,里面如果给他释放了还好,如果没有释放就不能这么传

objet de fonction

person p;
p(3,4);

La sous-classe privée de la classe parent ne peut pas être héritée et n'est pas accessible. On peut comprendre que l'héritage est hérité de cette manière. Une fois l'héritage terminé, la sous-classe ne peut pas accéder aux variables modifiées privées de la classe parent.
insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/qq_45179361/article/details/131340938
conseillé
Classement