C/C++面向对象基础知识面试易考点

来源:互联网 发布:贝玲妃旗舰店淘宝 编辑:程序博客网 时间:2024/06/05 06:25
  1. C++ 中struct 和class 都可以用来定义类型,两者的区别是:如果没有申明成员函数或成员变量的访问权限级别,在struct 中默认的权限是public,而在class 中默认的权限是private。
  2. 面向对象的三大特性:封装、继承、多态。
  3. 封装是将抽象得到的行为或功能相结合,形成一个整体,也就是“类”,其中数据和函数是类的成员;封装的目的简化和安全性,使用者不需要了解具体的实现细节,只需要通过外部接口,以特定的访问权限访问即可。
  4. 继承是子类可以使用父类的数据和方法,并且可以重写添加数据或方法,或者重载父类已有方法。
  5. 多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作,也就是“上溯造型” A a = new B()
  6. 类的初始化顺序,先初始化静态数据方法,然后再初始化成员变量方法,再执行构造函数内的语句;
  7. 空类型的sizeof 是1而不是0,因为在申明该类型的时候必须在内存中占用一定的空间,否则无法使用这些实例,一般VS 中占1个字节;在该类型中添加一个构造函数和析构函数,还是只占1个字节空间,因为调用构造/析构函数时只需要知道函数的地址即可,而地址只与类型相关,与实例无关;如果把析构函数标记为虚函数,则会为该类型生成虚函数表,并在该类型的每一个示例中添加一个指向虚函数表的指针,32位系统指针 sizeof = 4,64位系统指针 sizeof = 8。
  8. 拷贝构造函数 A::A(const A& obj) 在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象
  9. C++ 11 中引入 nullptr 专门用来表示空指针,避免混淆。以前是用 NULL, NULL是一个宏,它的值是0。
  10. C++ 中数组和指针是既有关联又有区别的两个概念。当申明一个数组时,其数组名也是一个指针,该指针指向数组的第一个元素,而当数组作为函数的参数进行传递时,会自动退化为同类型的指针。
  11. C/C++中字符串以字符’\0’结尾,每个字符串多一个额外的字符开销。
  12. 为了节省内存,C/C++ 把常量字符串放到单独的一个内存区域。当指针赋值给相同的常量字符串时,它们实际上是指向形同的内存地址;而用常量内存初始化数组时,会初始化两个地址不同的数组,并把常量内容分别复制到数组中。
  13. C++ 中String 的内容是不能改变的,如果改变内容则会生成一个新实例,当需要多次修改字符串内容时,使用StringBuilder处理字符串。下图代码中的str 并不会改变。
原创粉丝点击