• C++构造与析构 yongmou



      构造函数中调用虚函数
      调用的是基类中的函数不是调用派生类的,因为派生类还未构造完成。保持构造函数精简,可以把一些操作抽出来放在成员函数中,一般不要在构造函数中调用虚函数。


      调用基类构造函数,需要放在初始化列表中,放在派生类函数体里就会调用两次基类的构造函数,第一次是编译器插入的调用基类的无参构造函数。

      构造函数与析构函数调用顺序相反,大概是因为,派生类可能使用基类的数据

      虚析构函数,当使用基类指针析构派生类对象时,保证调用正确的析构函数

    下面给出一段测试代码:

    1 class A{
    2  public:
    3 A(){
    4 printf("构造 A\n");
    5 f();
    6 }
    7 virtual void f(){
    8 printf("A.f()\n");
    9 }
    10 virtual ~A(){
    11 printf("析构 A\n");
    12 }
    13 };
    14
    15  class B: public A{
    16  public:
    17 B(): A(){
    18 printf("构造 B\n");
    19 f();
    20 }
    21 virtual void f(){
    22 printf("B.f()\n");
    23 }
    24 virtual ~B(){
    25 printf("析构 B\n");
    26 }
    27 };
    28
    29  int main(){
    30 A *p = new B();
    31 p->f();
    32 delete p;
    33 return 0;
    34 }

    运行结果:

    [lym@localhost tmp]$ ./a.out
    构造 A
    A
    .f()
    构造 B
    B
    .f()
    B
    .f()
    析构 B
    析构 A
     

    上面所说的几点,应该都可以看出来。

    另外:

    定义变量时,对于单参构造函数

    Foo apple = 8; 与 Foo apple(8); 是等价的。

  • 相关阅读:
    CF 852E--Casinos and travel(思维)
    Sigma Sigma Cnk --- CF 575H
    CF1316E-Team Building(dp+贪心)
    cf1316C--Primitive Primes
    cf1323--Count Subrectangles(思维)
    CF252B--鸽巢原理
    HDU3652--容斥+数位dp
    DP--HDU4571(Floyd+dp)
    HDU4219--Randomization?(树形概率DP)
    HDU5945--Fxx and Game dp(单调队列优化)
  • 原文地址:https://www.cnblogs.com/liyongmou/p/2024629.html
Copyright © 2020-2023  润新知