zoukankan      html  css  js  c++  java
  • 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); 是等价的。

  • 相关阅读:
    Python Revisited Day 13 (正则表达式)
    Python Revisited Day 06 (面向对象程序设计)
    Python Revisited (变量)
    Python Revisited Day 05(模块)
    Python Revisited Day 04 (控制结构与函数)
    Python Revisited Day 03 (组合数据类型)
    Numpy
    Python Revisited Day 01
    Python3使用openpyxl读写Excel文件
    Python3操作YAML文件
  • 原文地址:https://www.cnblogs.com/liyongmou/p/2024629.html
Copyright © 2011-2022 走看看