10. 对象初始化

来源:互联网 发布:动画视频公司 tvc网络 编辑:程序博客网 时间:2024/06/05 05:35

存储

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

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;}
原创粉丝点击