Bootstrap

c++复习过程中理论与概念

类和对象

cpp程序中,一个类的构造函数可以被重载,但是一个类的析构函数却不能被重载;

构造函数的主要作用是初始化对象,而析构函数的作用主要是释放对象所占有的资源;

对象之间赋值,只有在初始化时才会调用拷贝构造函数,而普通的赋值,通常需要使用被重载过的“=”;

构造函数和析构函数只有在对象创建和消亡时才会被调用,并不可以多次调用

默认的拷贝构造函数实现的只能是浅拷贝,即直接将原对象的数据成员值依次复制给新对象中对应的数据成员,并没有为新对象另外分配内存资源。                                                                            当类的数据成员中有指针类型时,必须定义一个特定的拷贝构造函数,该拷贝构造函数不仅可以实现原对象和新对象之间数据成员的复制,而且可以为新的对象分配单独的内存资源,这就是深拷贝构造函数。

在 C++ 中,重载函数是允许使用默认参数的。但是,使用默认参数时要小心,因为在重载函数中,如果两个函数只有默认参数的差异,那么编译器可能会无法判断调用的是哪个函数,从而产生二义性。重载函数中编译根据参数表进行选择

函数重载的条件:1.在同一作用域下 2.函数的名称相同 3.函数的参数类型不同或者时函数的个数或顺序不同   但是返回值类型不同不可以当作时函数重载的条件

函数的默认参数,如果一个函数的参数列表中,有一个参数有了默认参数,那么它后面的所有参数都必须要有默认

cpp的拷贝构造函数通常为如下图,const一般是为了方式对于原对象改变(可以没有const关键字),而引用是为了避免不必要的复制而浪费空间(不可以不是引用)

MyClass(const MyClass &x);

静态成员在类中是被所有该类的对象共享的

const修饰的常成员变量,在创建对象时必须要初始化,但是const成员变量无法直接在构造函数中进行赋值操作,但是可以通过初始化列表的方式进行赋值

const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值(包括常成员变量和非常 成员变量),这种措施主要还是为了保护数据而设置的。const 成员函数也称为常成员函数。通常将const关键字放在函数的参数列表后面,如果将成员变量的前面加上mutable关键字,便可以在const成员函数中进行修改

如果某个函数的一个参数时类A的对象,那么在该函数被调用时,类A的拷贝构造函数将会被调用,如果函数的返回值类型时类A的对象时,则函数返回时,类A的拷贝构造函数将会被调用。

带参数的构造函数确实可以用于某些类型的隐式转换,但它并不等同于类型转换函数。

class MyClass {
public:
    MyClass(int x) { }  // 这个构造函数可以通过隐式转换来创建对象
};

void func(MyClass obj) { }

int main() {
    func(10);  // 10 会通过构造函数 MyClass(int) 隐式转换为 MyClass 对象
}

如果某个函数的返回值是个类的对象,那么返回的对象是通过拷贝构造函数进行初始化的

在创建一个类对象的数组时,如果对其初始化时参数个数不够,

//eg:
array[3]={12};
//那么只有数组中的第一个对象会调用含参构造函数,但是后面两个会调用默认构造函数

编译器通常会为一个类提供一个默认的赋值运算符(重载),并将等号右边对象的所有属性,赋值给等号左边的对象

如果函数的参数列表中含有一个直接传参的类对象,那么在函数执行的过程中,也会调用默认构造函数,但是如果参数列表中是对象的引用的话则不会调用构造函数

一个类的析构函数是在main函数结束之前调用的,但是如果是创建了一个静态对象,将对象存储在全局区的话,就会在main函数结束之后调用析构函数

父类子类的构造和析构顺序,先构造父类后构造子类,先析构子类,后析构父类(符合堆栈区先进先出的特点)

在函数声明的过程中,可以只写函数参数的类型,而不写参数的名称。

在多继承中,派生类的构造函数需要依次调用其基类的构造函数,而调用的顺序取决于定义派生类时所声明各个基类的顺序。在创建一个子类对象时 ,需要先创建一个其父类的对象,在析构的时候,子类对象先析构,父类对象后析构(符合堆栈区 的先出后进原则)如果是多继承派生出的派生类对象不能给基类对象赋值

在派生类和基类之间进行赋值,只能将派生类对象赋值给基类对象,不可以将基类对象赋值给子类对象,如果一个函数的形式参数是基类对象或者基类对象的引用,在函数的调用过程中,可以直接让派生类对象作为函数的实参。

派生类中不能继承基类中的静态成员函数

表达式

任何的表达式语句都是表达式加分号组成的

cpp中的逗号运算符(,)作用是,串联起多个表达式,并且按照顺序执行,返回值忽略中间的结果(除非他们有副作用,eg:输入输出修改变量值),并且会返回最后一个表达式的结果值

全局变量,静态变量如果没有进行初始化操作,编译器便会把全局变量初始化为0,但是局部变量的初始值不确定,

给字符串赋值 的几种方法
1.直接性赋值 char arr[10]="hello world";同时也可以将声明和赋值分开去写,但事实不可以写为arr=“hello world”;这样
2.第二种是使用string库中的strcpy函数来给字符串进行赋值char arr1[10];strcpy(arr1,"hello world");
函数中的第二个参数也可以传入一个字符串变量
3.第三种是通过指针进行直接性赋值char s[80],*p=s; p="hello";

;