美文网首页C++
C++ 构造函数、析构函数、拷贝构造函数

C++ 构造函数、析构函数、拷贝构造函数

作者: 贝克街的猫大哥呀 | 来源:发表于2017-08-29 14:52 被阅读16次

先说C++中的类,和结构体的区别

比如说,结构体中,是不能定义方法的,只能定义指针函数

在类中,是可以定义方法的,且类中,可以有this,直接指向变身的变量,这个在结构体中,都是不存在的。

构造函数

class Teacher{

   private:

   char *name;

   int age;

   public:

//无参构造函数(写了,就会覆盖默认的无参构造函数)

   Teacher(){

       cout << "无参构造函数" << endl;

}

//有参构造函数会覆盖默认的构造函数

   Teacher(char *name, int age){

     this->name = name;

     this->age = age;

    cout << "有参构造函数" << endl;

  }

};

void main(){

 Teacher t1;

 Teacher t2("yuehan",20);

//另外一种调用方式

  Teacher t3 = Teacher("jack",21);

  system("pause");

}

最后打印出的就是,无参,有参,有参

很简单,跟JAVA其实差不多

析构函数就是作善后处理的函数,如下

class Teacher{

   private:

   char *name;

   int age;

   public:

   //无参构造函数赋默认值

   Teacher(){

      this->name = (char*)malloc(100);

      strcpy(name,"jack walson");

      age = 20;

      cout << "无参构造函数" << endl;

}

//析构函数

//当对象要被系统释放时,析构函数被调用

//作用:善后处理

~Teacher(){

   cout << "析构" << endl;

   //释放内存

   free(this->name);

   }

};

void func(){

   Teacher t1;

}

void main(){

   func();

   system("pause");

   }

这样,当对象被系统释放时,析构函数也会被调用

下面讲讲拷贝

先看一个例子:

class Teacher {

   public:

   char *name;

   int age;

   public:

   Teacher(char *name, int age) {

       this->name = name;

       this->age = age;

      cout << "有参构造函数" << endl;

}

void myprint() {

    cout << name << "," << age << endl;

  }

};

void main() {

   Teacher t1("rose", 20);

    Teacher t2 = t1;

     t1.name = "yan";

     t1.myprint();

     t2.myprint();

     system("pause");

}

如上直接赋值,在JAVA中,t1,t2打印出来都是一直的,都是会yan。而在此处,只有t1是yan,t2的打印,依然会是rose。所以可以看出,这里的拷贝,是值拷贝,而不是指向指针。其效果等同于下面的写法:

class Teacher {

public:

char *name;

int age;

public:

Teacher(char *name, int age) {

   this->name = name;

   this->age = age;

   cout << "有参构造函数" << endl;

}

//拷贝构造函数(值拷贝)

//默认拷贝构造函数,就是值拷贝

Teacher(const Teacher &obj) {

   this->name = obj.name;

   this->age = obj.age;

   cout << "拷贝构造函数" << endl;

}

void myprint() {

   cout << name << "," << age << endl;

}

};

可以看出,这里面就重写了拷贝构造函数,其效果,和不写是一样的。原因前面说了,这是默认就是值拷贝,这里的写法,也是值拷贝。

相关文章

  • c++学习笔记2(GeekBand)

    拷贝构造、拷贝赋值和析构 c++中有Big Three三个特殊的函数,他们就是拷贝构造函数,拷贝赋值函数和析构函数...

  • (GeekBand)Second class

    一、Big Three:拷贝构造函数,拷贝赋值函数,析构函数 1.拷贝构造函数 文字定义:拷贝构造函数,又称复制构...

  • C++语言基础(02)

    1.可变参数 2.构造函数、析构函数、拷贝构造函数 构造函数 拷贝构造函数 //浅拷贝(值拷贝)问题 //深拷贝

  • 简介python中的析构函数与构造函数

    python的构造和析构函数为固定的名字。 构造函数 析构函数 不像c++中那样构造函数和析构函数是类名字。并且在...

  • C++boolan part1_week2

    Big Three三个特殊函数 (拷贝构造函数、拷贝赋值函数、析构函数) 1 拷贝构造函数 定义:如果一个构造函数...

  • C++面向对象高级编程(上)-第二周-博览网

    第二周 三大函数:拷贝构造,拷贝赋值,析构 字符串的构造函数,拷贝构造函数, 拷贝构造函数和拷贝赋值函数没有自主定...

  • [字符串] 自己实现一个string类(一)

    C++类一般包括:构造函数,拷贝构造函数,赋值构造函数和析构函数四大函数。 在上面的赋值构造函数中,都是先dele...

  • 三大函数

    三大函数 拷贝构造 拷贝赋值 析构函数

  • C++ 拷贝控制(二) — 移动构造函数和移动赋值运算符

    相关文章: C++ 拷贝控制(一) — 析构函数、拷贝构造函数与拷贝赋值函数 C++ 引用类型 — 左值引用、常引...

  • Boolan第二周笔记

    一、C++三个特殊的函数(Big Three):拷贝构造函数,赋值构造函数和析构函数 class里面只要有指针,就...

网友评论

    本文标题:C++ 构造函数、析构函数、拷贝构造函数

    本文链接:https://www.haomeiwen.com/subject/eyrgdxtx.html