建立类模板的对象时,需要先将类模板实例化,也就是类模板传递参数完成实例化,先指明这个对象,然后在实例化这个对象
结构体包含成员函数,能够实现继承和多态,结构体除了访问权限和类不一样外,几乎可以说是一模一样
const在*号左边时,表示指向的值不变,位于*右时,指针的指向不能改变
#ifndef、#define、#endif 是预处理命令,它们一起用来根据不同情况编译不同代码、产生不同目标文件的机制,称为条件编译。一般可以用于防止头文件重复包含。
main函数里面的s没有被初始化,编译时会报警,运行时会报错 假设s被初始化后,f()函数里面局部变量t的大小为7,而strcpy函数会复制example末尾的\0 所以example+'\0'一共8个字节空间,会溢出,程序会崩溃。 3.就算局部变量t的大小足够大,在fun函数运行结束后,局部变量t的内存空间会被释放掉,此时s成为野指针;返回main函数后,也不会输出example。
gcc 和 GCC 是两个不同的东西 GCC:GNU Compiler Collection(GUN 编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object-C、Ada等语言。 gcc是GCC中的GUN C Compiler(C 编译器) g++是GCC中的GUN C++ Compiler(C++编译器) 一个有趣的事实就是,就本质而言,gcc和g++并不是编译器,也不是编译器的集合,它们只是一种驱动器,根据参数中要编译的文件的类型,调用对应的GUN编译器而已,比如,用gcc编译一个c文件的话,会有以下几个步骤: Step1:Call a preprocessor, like cpp. Step2:Call an actual compiler, like cc or cc1. Step3:Call an assembler, like as. Step4:Call a linker, like ld 由于编译器是可以更换的,所以gcc不仅仅可以编译C文件 所以,更准确的说法是:gcc调用了C compiler,而g++调用了C++ compiler gcc和g++的主要区别 1. 对于 *.c和*.cpp文件,gcc分别当做c和cpp文件编译(c和cpp的语法强度是不一样的) 2. 对于 *.c和*.cpp文件,g++则统一当做cpp文件编译 3. 使用g++编译文件时,g++会自动链接标准库STL,而gcc不会自动链接STL 4. gcc在编译C文件时,可使用的预定义宏是比较少的 5. gcc在编译cpp文件时/g++在编译c文件和cpp文件时(这时候gcc和g++调用的都是cpp文件的编译器),会加入一些额外的宏
a是个函数声明 ,如果是定义对象 类名 变量名
一、赋值兼容 1.子类对象可以赋值给父类对象 2.子类对象可以初始化父类对象 3.父类指针可以指向子类对象 4.父类引用可以引用子类对象 二.子类重写父类 当父类指针(引用)指向子类对象时,子类对象退化成父类对象,只能访问父类中定义的成员 如果B对象没有virtual修饰的话,B* pb = ⅆ dd就会退化为父类对象,pd就只能访问父类的成员B::Fun()。
但是又virtual修饰的话,就会展现多态行为,会根据实际指针指向的对象判断函数的调用。pb 和pd都指向子类对象,所以调用D::Fun()。
合法的浮点数有两种表示形式: 十进制小数形式。他有数字和小数点组成,必须有小数点。例如(123.)(123.0)(.123)。 指数形式。如123e3。字母e(或E)之前必须有数字,e后面的指数必须为整数。规范化的指数形式里面,小数点前面有且只有一位非零的数字。如1.2345e8
静态变量只会初始化一次
CA* pa =&c;这句话是父类指针指向子类对象,调用pa->f1()时,因为父类中的f1()是虚函数,所以将发生动态绑定,调用子类CB中的f1()函数,先输出CB::f1() 在CB类的f1()函数中,调用非虚函数f2(),但因为其父类CA中的f2()函数并不是virtual函数,所以将调用CB类中的f2()函数,输出CB::f2()。如果将CA类中的f2()改成虚函数,那么将输出CC::f2();如果将CB类中的f2()改成虚函数,也将输出CC::f2(),这是满足动态绑定的。
A,正确,#define定义的宏是在预处理阶段进行替换的,const常量是在编译、运行阶段进行使用的。 注意是仅仅的字符串替换,并不会检查其合法性。 预处理阶段做了的任务: 1:将头文件中的内容(源文件之外的文件)插入到源文件中 2:进行了宏替换的过程(简单的字符串替换),定义和替换了由#define指令定义的符号 3:删除掉注释的过程,注释是不会带入到编译阶段 4:条件编译 B,正确,所有的宏替换只是简单的字符串替换,注意是字符串替换,所以并不会检查其合法性,而const定义的常量依然是内置类型等,所以会对其进行类型安全检查。 C,正确,宏定义在程序中使用了几次在预处理阶段就会被展开几次,并不会增加内存占用,但是宏定义每展开一次,代码的长度就要发生变化(所以有利必有弊啊!),而const常量也会为其分配内存(如果是动态申请空间肯定就是堆中了)。 D,错误,const定义的常量只有一次拷贝没毛病,而define定义的变量在内存中并没有拷贝,因为所有的预处理指令都在预处理时进行了替换。
标签:gcc,函数,++,子类,day4,编译,父类 From: https://www.cnblogs.com/skural/p/17653041.html