10. 对象初始化

存储

编译器会在{}开始出现的所有变量的空间.
构造器的调用只在创建对象时发生.

class X
{
  public:
   X(); //构造函数
};
X::X() //构造函数
{
}
void f(int i)
{
   if(i<10)
   {
     goto jump1; //如果运行这行,x1的构造就没有做, f结束的时候x1是需要析构的。一个对象没有构造,所以没有办法析构. 
   }
   X x1; //x1的空间,进了f就有了. 但是构造函数只有运行到这行才会做.
   jump1:
   switch(i)
   {
      case 1:
        X x2;
        break;
        X x3;
        break;
   }
}

没有参数的构造函数(default constructor)

#include "stdafx.h"
#include <stdio.h>

class A
{
public:
    int i;
    A(int a);
    ~A();
    void f();
};

A::A(int a)
{
    i = a;
    printf("A::A() -- this = %p\n", this);
}

A::~A()
{
    printf("A::~A()\n");
}

void A::f()
{
    this->i = 20;
    printf("A::f()--&i=%p\n", &i);
    printf("this=%p\n");
}

int main()
{
    A a(1);
    a.i = 10;
    printf("&a=%p\n", &a);
    printf("&a.i=%p\n", &(a.i));

    A aa(2);
    a.f();
    printf("&aa=%p\n", &aa);
    aa.f();

    A y[2] = { A(1),A(2) };//程序是对的,调用2个构造函数
    A yy[2] = { A(1)}; //程序出错,2个数组中存储的是对象,需要调用带参数的构造函数,只写了一个,所以会出错.

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值