auto
auto i = 3; //i是int
auto j = 4.0f; //j是float
auto 让编译器自己通过上下文确定变量类型
初始化方法的列表
int a[]={1,2,3};
int a[]{1,2,3};//和上面的等效;
int a = 3+5;
int a = {3+5};
int a(3+5);
int a{3+5};//以上四个等效
int *i = new int(10); //这个int的初始值是10;
double * d = new double{1,2f};//同上
函数重载
指在同一作用域内,可以定义多个同名函数。这些同名函数的参数必须有差别(类型、个数、顺序都行)。主要作用是提高代码复用性和灵活性。
void print(char*msg){
cout<<"message:"<<msg<<endl;
}
void print(int score){
cout<<"score="<<score<<endl;
}
这时候,通过传入的函数变量的差别,选择执行不同的函数。
函数参数的缺省值
也就是在函数的参数小括号里面,给这些参数设置个初始值【默认值】。如果在调用的时候不传入参数,那么就会默认使用设置的初始值。但是!!所有有默认值的参数,必须在没有默认值参数的后面。
追踪返回类型的函数
auto func(char*ptr,int val)->int;
//==int func(char*ptr,int val);
格式就类似上面的样子。主要解决的就是,当返回值需要函数参数决定的时候。
auto add(int a,int b)->decltype(a+b){
return a+b;
}
在上面的函数里,最终的返回类型是通过a+b这个表达式进行确定的(即int)。
类class
让用户自定义、包含【函数】(成员函数)和【数据】(数据成员)的特殊的“结构体”。
类里面的成员可以根据需要分为public\private\protected三种访问权限。
面向对象最后面向的对象,其实就是用类定义的变量。也就是,一个变量,它由一个类(class)定义,它有自己的成员函数、数据成员,然后这个一整体的它,就是面向的【对象】。
通过【对象名.成员名】的方式调用这个对象中的权限为public的成员(函数和数据都行)
定义类的函数
1.类外定义
【类型名 类名::函数名(参数){}】
//进行函数实现的cpp文件
#include "matrix.h"
void Matrix::fill(char dir){}
2.类内定义(其实就是很平常的函数定义)
this指针【妈妈我总算搞懂啦!!】
是编译器默默的帮我做了这么一件事。它无私地命名了一个 指向 这个对象 的指针,叫做this。将这个指针看成普通指针即可。【需要注意一点的是,这个指针是对象内自带的。对象自己使用this来代指自己。通过this->data来访问这个对象自己内的数据成员】
访问权限【它它它到底有什么用啊啊啊!!】
不声明则默认为private。
如果操作了private的数据,就会显示编译错误。
友元【用于解决访问私有成员】(一般不这么干)
私有成员是非常害羞的成员。所以需要在对象里告诉私有成员,谁谁谁是你的朋友,它对你很友好,你可以放心大胆去接触它。然后就有了:
#include<iostream>
using namespace std;
class Test{
int id; //默认private;
public:
friend void print(Test obj);
...
};
void print(Test obj){
cout<<obj.id<<endl;
}
【累了,2024.2.5停笔... 啊啊啊什么时候是个头哇... 今天陪老婆吃了海底捞,没想到饭量还是一如既往的小。惹老婆生气了但最后发现是一场误会,还是相亲相爱的。希望早点“编程自由”,这样就不用纠结学习和陪老婆的时间配比了呜呜呜😭😭😭】