C++学习笔记

1.引用必须要初始化,初始化后不能更改。(数据类型 &别名=原名)

int main{

     int a=10;

     int b=20;

     //int &c=a;    //引用必须要初始化

     int &c=a;     //一旦初始化后,就不能更改了

     c=b;         //这是赋值操作,不是更改引用,将b的值赋给c指向的内存空间

}

2.引用作为函数的形参时可以修改实参。

3.函数在返回引用值时,不能返回局部变量的引用。出了函数,局部变量会被释放。

4.引用的本质就是一个指针常量

int main()

{

int a = 10;

int& ref = a;  //编译器自动转换为int* const ref=&a; 指针常量是指针指向不变

ref = 20;      //编译器发现ref是引用时,会自动转换为*ref=20;

   cout << "a:" << a << endl;        //20

cout << "ref:" << ref << endl;    //20

   return 0;

}

5.常量引用的作用是修饰形参,防止误操作。在函数体内用引用修改数据会影响实参,用const修饰形参可以防止在函数体内修改。

6.函数默认参数,语法:返回值类型 函数名(形参=默认值)。如果传入数据,就用自己的,如果没有,就用默认值。注意,如果某个位置有了默认参数,那么这个位置后必须是有默认值。

7.在函数的声明和实现时,只能有其中一个有默认参数。

int fun(int a, int b);

int fun(int a=10, int b=10)

{

   return a + b;

}

8.函数占位参数:返回值类型 函数名(数据类型)。占位参数还可以有默认参数。

void fun(int a, int=10)

具体应用递增运算符重载?

9.函数重载的满足条件:①同一作用域下②函数名称相同③函数参数类型不同,或者个数不同,或者顺序不同。

注意:函数的返回值不可以作为函数重载的条件。

10.当引用作为函数重载条件时:

void func(int& a)

{

   cout << "func(int& a)调用" << endl;

}

void func(const int& a)

{

cout << "func(const int& a)调用" << endl;

}

int main()

{

int a = 10;

func(a);   //调用无const

   func(10);  //调用有const。因为当传入10时,int& a=10不合法,const int& a=10合法

    return 0;

}

11.函数重载遇到函数默认参数

void func(int a,int b=10)

{

cout << "func(int a,int b=10)调用" << endl;

}

void func(int a)

{

cout << "func(int a)调用" << endl;

}

int main()

{

func(10);  //函数重载遇到默认参数,出现二义性,会报错

   return 0;

}

12.public是公共权限,类内和类外都可以访问。protected是保护权限,类内可以访问,类外不可以访问,子类可以访问。private是私有权限,类内可以访问,类外不可以访问,子类不可以访问。

13.在C++中struct和class都是类,区别在于struct默认权限是共有,class默认权限是私有。

14.成员属性设置为私有权限有两个优点:①将所有成员属性设置为私有,可以自己控制读写权限②对于写权限,我们可以检测数据的有效性。

15.构造函数语法:①没有返回值,也不能写void②函数名称与类名相同③可以有参数,因此可以重载④程序调用对象时会自动调用构造,无须手动调用,而且只能调用一次。

16.析构函数:①没有返回值,也不能写void②函数名称与类名相同,在名称前加符号~③不可以有参数,因此不可以重载④程序调用对象时会自动调用构造,无须手动调用,而且只能调用一次。

17.构造函数的分类:按照参数分类:有参构造和无参构造(默认构造)   按照类型分类:拷贝构造和普通构造

注意:无参构造不能加括号,如果加了,编译器会认为这是一个函数的声明

18.构造函数调用方法:

①括号法

Person p1;   //默认构造函数调用

Person p2(10);   //有参构造函数

Person p3(p2);   //拷贝构造函数,传参传的是实例变量,将p2变量拷贝给p3

②显示法

Person p2 = Person(10);      //有参构造函数

Person p3 = Person(p2);      //拷贝构造函数

注意:①单独写Person(10)就是匿名对象,当前行执行结束后,系统会立即收掉匿名对象。②不能用拷贝构造函数初始化匿名对象【Person p2(p1);】编译器会认为这是对象的声明

③隐式转换法

Person p2 = 10;    // 编译器会转为Person p2 = Person(10)

Person p3 = p2;    //编译器会转为Person p3 = Person(p2)

19.拷贝构造函数的调用时机:

①使用一个已经创建完毕的对象来初始化一个新对象

②值传递的方式给函数参数传值:实参是一个对象,在传给形参的时候会调用拷贝构造

③值方式返回局部对象:当函数的返回值是一个对象用另一个对象接受它时也会调用拷贝构造

20.构造函数的调用规则,创造一个类,C++编译器会自动添加3个函数:默认构造函数(无参,函数体为空)、默认析构函数(无参,函数体为空)、默认拷贝构造函数。当用户定义了有参构造函数,那么编译器就不会提供默认构造函数,但是会提供默认拷贝构造。当用户定义拷贝构造函数,那么编译器就不会提供其他构造函数。

21.浅拷贝:简单的赋值拷贝操作    深拷贝:在堆区重新申请空间,进行拷贝操作。

22.浅拷贝时,拷贝的内容是堆区地址时,会带来的问题是,在对同一块内存重复释放

 解决方法是自己写一个拷贝函数,利用深拷贝

23.初始化列表

24.静态成员变量的特点:

①所有对象共享同一份数据,不属于某个对象,既能通过对象访问(对象.变量名),又能通过类名访问(类名::变量名),但是不能在类外用类名访问私有静态成员变量。

②在编译阶段分配内存

③类内声明,类外初始化。

25.静态成员函数:

①所有对象共享同一个函数

②静态成员函数只能访问静态成员变量,不能访问非静态成员变量,因为编译器不知道访问的到底是哪个对象的成员变量,而静态成员变量的数据是共享的不属于某个对象,所以静态成员函数只能访问静态成员变量。

26.成员变量和成员函数分开储存的,非静态成员变量属于类的对象上, 非静态成员函数、静态成员变量、静态成员函数均不属于类的对象上,意思就是在计算对象占用内存是这些东西不计入其中。

27.空对象占用内存空间为1【sizeof(p)=1】,有他独一无二的内存地址。

28.每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会公用一块代码。

29.哪个对象调用成员函数,那么this就指向哪个对象。

30.当形参和成员变量同名时,可用this指针区分。

31.在类的非静态成员函数中返回对象本身,可使用return *this

32.空指针可以访问成员函数。

33.在对象前加const,变为常对象,常对象只能调用常函数。

34.

#include <stdio.h>

int main() {
    int num = 42;
    float pi = 3.14159;
    char ch = 'A';
    char str[] = "Hello";
    
    printf("%d\n", num);    // 输出: 42
    printf("%.2f\n", pi);   // 输出: 3.14
    printf("%c\n", ch);     // 输出: A
    printf("%s\n", str);    // 输出: Hello
    
    return 0;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值