很少注意到的main函数的另一个重载形式,int main(int argc,char *argv[])。

#include<bits/stdc++.h>
#include<assert.h>
using namespace std;
int main(int argc,char *argv[]){
//main函数的重载,另一个是int main(void)
//argc表示传进去多少个参数
//argv是一个包含传入参数的默认二维char数组,调用函数,默认会将调用的函数名作为第一个参数
//很像命令
int (*f)(int,char *[])=main;
//函数指针
if(argc!=0){
char ***a=&argv,*first=argv[0],ch=argv[0][0];
//printf("arg=\"%s\";ch='%c'\n",first,ch);
cout<<"argc= "<<argc<<endl;
for(int i=0;i<argc;i++){
printf("argc[%d]= %s\n",i,argv[i]);
}
assert(***a ==ch);
//assert的作用是先计算表达式expression,如果其值为假(即为0),那么它先向stderr打印一条出错信息,之后通过调用abort来终止程序运行。判断是否第一个字符是否等于第一个字符?一定会相等吧。
f(argc - 1,argv+1);
//通过函数指针递归调用main.exe,并控制参数的传入,传入的参数减少一个,argv指针类型为char***,argv变量+1,应该是重载过加号,意思是指向下一个地址空间的char**地址,下一次进入递归,会打印下一个传入的参数。
}
}

面向对象课上学的c++类的基本元素:
class Object{
Object(arg);//构造函数
Object(arg):Object(arg');//构造函数列表
~Object(void);//析构函数
Object(const Object &object);//拷贝构造函数
friend void func(arg);//友元函数
friend class ObjFriend;//友元类
virtual void func();//虚函数,用于实现多态
virtual void func()=0;//纯虚函数,用于实现接口和抽象类
void func();//重写
void func(arg);//重载
}

之前一直没有理解多态的作用,多态可以使编写父类的程序员无需关心子类的情况,可以将一个子类的实例赋值给父类,此时这个实例拥有子类的细节,当调用其中的虚方法的时候,能正确调用子类的实现方法,方便上游程序员编写类的相关方法。

一些细节:

  • 无参构造方法,实例化的时候不能带括号。
  • time(0)函数返回的是秒。
  • 尽量多用const修饰。

一些好用的库:

  • 正则表达式regix,可以方便的进行自定义字符提取,判断是否匹配格式。