-
全局变量先于main函数执行,在最初运行时就调用构造函数
-
main函数之前是用来声明和定义全局变量和函数的,并由编译器进行预处理,给那些全局变量和定义的函数分配内存和地址,不能设计可执行代码。
编译器在编译阶段对main函数之前的全局变量进行内存分配,对定义的函数生成可执行的代码,并保留该函数的地址以供main函数调用,而赋值语句操作是一句可执行代码,又没有类似函数指针的东西供main函数调用,所以只能放在main函数内部进行顺序执行。
在多文件组织中,只有在包含main函数的源文件里面的main函数内部才能对变量进行赋值语句的操作,而其它不包含main的源文件这不能进行变量的赋值操作,只能进行变量的声明。
但并不是说在main函数之前就不能对变量进行初始化赋值:可以在定义变量的时候对变量进行初始化赋值。如下:
int a=10;
student s1={10};
虽说可以在初始化时赋值,但是如果是个自定义类,在main()外面还是不能赋值. 只有基本类型在初始化时可以赋值.
-
在使用{}初始化数组时,必须在定义处初始化。
int a[3]={1,2,3};正确
int a[4]; a[]={1,2,3};错误
-
只要基类的函数声明为虚函数,其所有派生类的同名函数都是虚函数
-
char* str的常长字符串初始化方式
// 错误
const char* aa = "fsd
sfdf";
// 正确,占有8个字节内存
const char* aa = "fsd\
sfdf";
// 该字符串一共占有10个字节
const char* ss = "fed"
"fwf"
"fwf";
const char * usage =
" \nexample command line for calibration from a live feed.\n"
" calibration -w=4 -h=5 -s=0.025 -o=camera.yml -op -oe\n"
" \n"
" example command line for calibration from a list of stored images:\n"
" imagelist_creator image_list.xml *.png\n"
" calibration -w=4 -h=5 -s=0.025 -o=camera.yml -op -oe image_list.xml\n"
" where image_list.xml is the standard OpenCV XML/YAML\n"
" use imagelist_creator to create the xml or yaml list\n"
" file consisting of the list of strings, e.g.:\n"
" \n"
"<?xml version=\"1.0\"?>\n"
"<opencv_storage>\n"
"<images>\n"
"view000.png\n"
"view001.png\n"
"<!-- view002.png -->\n"
"view003.png\n"
"view010.png\n"
"one_extra_view.jpg\n"
"</images>\n"
"</opencv_storage>\n";
-
继承
public继承:子类不能访问父类的私有成员,能够访问访问public、protect成员。但是子类的对象不能访问父类的protect成员。
protect继承:子类只能访问父类的公有成员,不能访问私有成员和保护成员。子类对象只能访问父类的公有成员。
private继承:子类不能访问父类的所有成员。子类对象不能访问父类所有成员。
-protect修饰的成员不能被外界所访问
-protect修饰的成员能被子类直接访问
-protect关键字是为了继承而专门设计的