在C中没有Protection行为;在C++中有
在C中不可以定义函数,但是可以有函数指针;C++可以定义函数,默认是public
从语法上看,class和struct做类型定义的时候有两点区别
a.默认继承权限。如果不明确指定,来自class的继承按照private继承来处理;来自struct的继承按照public继承来处理。
b.成员的默认访问权限。class的成员默认是private权限;struct默认是public权限。除了这两点,class和struct基本就是一个东西。在语法上没有其他什么区别。
#ifdef_cplusplus
cout<<"C++";
#else
printf("C");
#endif
机制上:C是面向过程的;C++是面向对象的, 提供了类。C++编写面向对象的程序比C容易。
适用上:C适合要求代码体积小的,效率高的场合,比如嵌入式开发方面;
C++适合更上层的,复杂的;
linux核心大部分是C写的,因为它是系统软件,效率要求极高。
侧重上:C语言是结构化编程语言,C++是面向对象编程语言。C++侧重于对象而不是过程,侧重于类的设计而不是逻辑的设计。
指针是通过某个指针变量指向一个对象后,对它所指向的变量间接进行操作。程序中使用指针,程序可读性差;
引用本身是目标变量的别名,对引用的操作就是对目标变量的操作。
class A {
virtual void func1();
void func2();
} ;
class B: class A {
void func1() {
cout < < "fun1 in class B" < < endl;
}
virtual void func2() {
cout < < "fun2 in class B" < < endl;
}
}
A、A中的func1和B中的func2都是虚函数
B、A中的func1和B中的func2都不是虚函数
C、A中的func2是虚函数.,B中的func1不是虚函数
D、A中的func2不是虚函数,B中的func1是虚函数
答:正确
sizeof是编译时运算符,在编译时就确定了可以看成和机器相关的常量。
A只限某个函数
B本文件
C跨文件
D不限制作用域
答:按值传递,按地址传递,按引用传递
10.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?
C用宏定义,C++用inline
a.引用必须要初始化,指针不用
b.引用初始化以后不能被改变,指针可以改变所指的对象
c.不存在指向空值的引用,但是存在指向空值的指针
在基类成员函数的声明前面加上virtual关键字,就意味着将该成员函数声明为虚函数
inline与函数的定义体放在一起,使得该函数成为内联。inline是一种用于实现的关键字,而不是用于声明的关键字。
虚函数的特点:如果希望派生类能够重新定义基类的方法,则在基类中将该方法定义为虚方法,这样可以启用动态联编。
内联函数的特点:使用内联函数的目的是为了提高函数的运行效率。内联函数体的代码不能过长,因为内联函数省去调用函数的时间是以代码膨胀为代价的。内联函数不能包含循环语句,因为执行循环语句要比调用函数的开销大。
Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。
Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
Debug带有大量的调试代码,运行时需要相应的运行库,发布模式程序紧凑不含有调试代码和信息,直接可以运行(如果不需要运行库)。
断言assert是仅在debug版本起作用的宏,用于检查“不应该”发生的情况
程序员可以把assert看成一个在任何系统状态下都可以安全使用的无害测试手段。
a. const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。
b. 有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量调试。