C++学习3

constructor:构造函数

destructor:析构函数

 

class X{
    int i;
public:
    X();//构造函数与类名相同,没有返回值,在对象被创建时自动被调用,构造函数也是成员函数
};
void f() {
    X a;//只要对象被定义,构造函数就会被调用,即此时一定会发生a.X();
}
class Point {//C++的类不负责自动初始话
public:
    void init(int x,int y);//初始化函数,如果不初始化,x,y的内容是什么不确定,并不一定是0
    void print() const;
    void move(int dx,int dy);
private:
    int x;
    int y;
};
Point a;
a.init(1,2);
a.move(2,2);
a.print();
class X{
    int i;
public:
    X();//构造函数与类名相同,没有返回值,在对象被创建时自动被调用,构造函数也是成员函数
};
void f() {
    X a;//只要对象被定义,构造函数就会被调用,即此时一定会发生a.X();
}
class A{
public:
    int i;
    A();
    ~A();
    void f();
};
struct B{
    int i;
};
A::A(){  
    i=0;//构造函数也是成员函数,因此,构造函数使用的i也是this->i
    printf("A::A()--this=%p\n",this);\\输出this的地址
}

A::~A(){
    print("A::~A()\n");
}
voif d A::f(){
    this->i=20;
    printf("A::f()--&i=%p\n",&i);
    printf("this=%p\n",this);
}
void f(struct B* p){
    p->i=20;
}
int main(){
     A a;
    A aa;
    B b;
    a.i=10;
    printf("&a=%p\n",&a);
    printf("&a.i=%p\n",&(a.i));
    a.f();
    a.ff();
    printf("&aa=%p\n",&aa);
}//离开mian时两个对象调用析构函数
//构造函数可以有参数
Tree(int i){
 ......  
}
Tree t(12);//12会被传给i
#include<iostream>
using namespace std;

class Tree {
    int height;
public:
    Tree(int initialHeight);  //Constructor
    ~Tree();  //Destructor
    void grow(int years);
    void printsize();
};

Tree::Tree(int initialHeight) {
    height=initialHeight;
    cout<<"inside Tree::Tree()"<<endl;
}

Tree::~Tree(){
    cout<<"inside Tree destructor"<<endl;
    printsize();
}

void Tree::grow(int years) {
    height+=years;
}

void Tree::printsize() {
    cout<<"Tree height is "<<height<<endl;
}

void Tree::printsize(){
    cout<<"Tree height is "<<height<<endl;
}
int main(){
    cout<<"before opening brace"<<endl;
    {//进入大括号前t不存在,离开大括号后t也不存在
        Tree t(12);//进入大括号后,t才存在,才会调用构造函数
        cout<<"after Tree creation"<<endl;
        t.printsize();
        t.grow(4);
        cout<<"before close brace"<<endl;
    }//此时调用析构函数
    cout<<"after closing brace"<<endl;
}
class Y {
public:
    ~Y();//当对象要被消灭掉时调用析构函数,析构函数没有参数,析构完后释放资源
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值