【基础复习】六:面向对象


面向对象的基本概念

类和结构

  • struct中也可以有构造函数、析构函数、之间也可以有继承。但struct中默认的访问控制是public,而class中的默认访问控制是private。

2.下面代码出编译错误的是?

#include<iostream>
using namespace std;

struct Test
{
    Test(int){
    }
    Test(){}
    void fun(){}
};

int main() {
    Test a(1);  //statement1
    a.fun();    //statement2
    Test b();   //statement3
    b.fun();    //statement4
    return 0;
}

解析:
statement4。因为statement3中Test b();实际上是声明了一个函数b,函数的返回值是Test,所以statement4这一句就出错了。正确的写法应该是Test b;

成员变量

  • 静态成员函数可以在一个类的所有实例间共享数据。
  • 如果想限制对静态成员变量的访问,则必须把它们声明为保护型或私有型,然后通过共有静态成员函数访问。
  • 设定了静态成员变量,要给静态成员变量赋初值。
  • 构造函数的初始化列表是根据数据成员的声明顺序进行初始化的,和初始化列表的顺序无关。

构造函数和析构函数

面试题

  • 虚函数采用一种虚调用的方法。虚调用是一种可以在只有部分信息的情况下工作的机制,特别允许我们调用一个只知道接口而不知道其准确对象类型的函数。

复制构造函数和赋值函数

  • 派生类中的虚函数的声明必须与基类中的定义方式完全匹配。但是有一个例外,返回对基类型的引用或指针的虚函数,派生类中的虚函数可以返回基类函数所返回类型的派生类的引用或指针。

多态的概念

  • 多态性是是允许你将父对象设置成一个或更多的它的子对象相等的技术,赋值后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
  • 多态的本质就是将子类类型的指针赋给父类类型的指针。
  • 多态性在c++中通过虚函数实现
  • 虚函数就是允许被其子类重新定义的成员函数
  • override是指派生类重写基类的虚函数,overload是指编写一个与已有函数同名但是参数表不同的参数。
  • 面试题

友元

  • 友元是一种定义在类外部的普通函数,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend.
  • 友元不是成员函数,但是可以访问类中的私有成员
  • 友元可以是一个函数,该函数为友元函数。友元也可以是一个类,该类称为友元类。

异常

  • 在构造函数中抛出异常,有其必要性。因为此时如果new了一部分内存后出错了,对象构造尚未完成,无法调用析构函数释放内存是会导致内存泄露的,需要catch之后释放掉new一半的内存。
  • C++通知对象构造失败的唯一方法,就是在构造函数中抛出异常
  • 当对象发生部分构造时,已经构造完毕的子对象将会逆序地被析构
  • 析构函数尽可能地不抛出异常

from《程序员面试宝典》

原文地址:https://www.cnblogs.com/zengyh-1900/p/5246055.html