单个对象创建时,构造函数的调用顺序

1.首先判断该对象的类是否拥有父类,若有则先调用父类的构造函数

2.判断该对象的成员是否是其它类的成员,若是则调用成员变量的构造函数(调用顺序和声明顺序相同)

3.最后调用对象本身类的构造函数

单个对象被注销后,调用的析构函数与对应构造函数的调用顺序相反

参考下面示例,创建两个类Member,Test,然后Tesrt成员包含了Member类的成员:

#include <stdio.h>

class Member
{
    const char* ms;
public:
    Member(const char* s)
    {
        printf("Member(const char* s): %s\n", s);     
        ms = s;
    }
    ~Member()
    {
        printf("~Member(): %s\n", ms);
    }
};
class Test { Member mA; Member mB; public: Test() : mB("mB"), mA("mA") { printf("Test()\n"); } ~Test() { printf("~Test()\n"); } }; Member gA("gA"); int main() { Test t; return 0; }

运行打印:

Member(const char* s): gA
Member(const char* s): mA
Member(const char* s): mB
Test()

~Test()
~Member(): mB
~Member(): mA
~Member(): gA

 

const成员函数

为了体现对象的封装性,C++在类里引入了const成员函数

  • cosnt成员函数里只能调用const成员函数
  • const成员函数中不能直接修改成员变量的值
  • 只有对mutable修饰的成员变量, const成员函数是可以修改的
  • 如果用const修饰的函数,那么该函数一定是类的成员函数

const成员函数定义,是在函数声明最右侧带上const关键字,例如:

class Test{
pbulic:
   int func(void) const;
}

int Test::func(void) const
{   }

 

const对象

  • const对象的成员变量不允许被改变,
  • const对象只能调用const成员函数,而非const对象可以访问const成员函数
  • const对象是编译阶段的概念,运行时无效

const对象定义,是在对象声明最左侧带上const关键字,例如:

class Test{
pbulic:
   int func(void) const;
}

int Test::func(void) const
{   }

const Test t;               

 

posted on 2018-03-17 19:41 LifeYx 阅读() 评论() 编辑 收藏
版权声明:本文为lifexy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/lifexy/p/8592192.html