构造函数 客官°小女子只卖身不卖艺 2022-06-09 06:21 179阅读 0赞 构造函数和析构函数是两个非常特殊的函数:它们没有返回值。这与返回值为void的函数显然不同,后者虽然也不返回任何值,但还可以让它做点别的事情,而构造函数和析构函数则不允许。在程序中创建和消除一个对象的行为非常特殊,就像出生和死亡,而且总是由编译器来调用这些函数以确保它们被执行。如果它们有返回值,要么编译器必须知道如何处理返回值,要么就只能由客户程序员自己来显式的调用构造函数与析构函数,这样一来,安全性就被人破坏了。另外,析构函数不带任何参数,因为析构不需任何选项。 一 析构函数: 语法 :~classname() 特点: 1)无任何类型的返回值 2)无参数 调用机制:在对象被销毁时自动调用 ~Struct_func(void) { cout << "我是析构函数" << endl; } 二 构造函数 特点 :1)方法名与类名相同 2 可以有参数,但不可以有返回值 1 )无参构造函数 默认构造函数是没有参数的构造函数 class Struct_func{ public: Struct_func() { cout << "无参构造函数" << endl; } ~Struct_func(void) { cout << "我是析构函数" << endl; } }; void displayStructFunc(void) { Struct_func t1; } int main() { /*这里并未显示的调用构造函数,但只是构建一个其对象,会输出:无参构造函数 我是析构函数 */ displayStructFunc(); system("pause"); return 0; } 2 有参构造函数的二种初始化方式 初始化方式案例: a1 :用括号法初始化 a2 :显示的调用成员函数初始化 class Struct_func{ public: Struct_func(int ma,int mb) { a = ma; b = mb; cout << "有参构造函数" << endl; } ~Struct_func(void) { cout << "我是析构函数" << endl; } Struct_func(int ma) { } public: void print(void) { cout << "a=:" << a << " b=:" << b; } private: int a; int b; }; int main() { #if 0 /*方法 1*/ Struct_func t1(1, 2); t1.print(); #endif /*方法2显示的调用构造函数*/ Struct_func t2 = Struct_func(9, 0); t2.print(); system("pause"); return 0; } 方式2可以衍生为 Struct_func t1 (9, 0); Struct_func t2 =t1;/*在默认情况下将同一个对象赋值给里一个同类型的对象时,c++将每一个原对象的数据成员内容复制到目标对象对应的数据成员中*/ 2 拷贝构造函数的初始化(4中初始化方式) 1)用对对象初始化对象 class Struct_func{ public: Struct_func(Struct_func &obj) { a = obj.a+100; b = obj.b+1000; cout << "有参构造函数" << endl; } Struct_func(int _a,int _b) { a = _a; b = _b; cout << "有参构造函数" << endl; } ~Struct_func(void) { cout << "我是析构函数" << endl; } public: void print(void) { cout << "a=:" << a << " b=:" << b; } private: int a; int b; }; int main() { Struct_func t2(9, 0); Struct_func t3(9, 10); /*初始化方式1*/ Struct_func t1 = t2;//用t2初始化t1,只是将t1的值传递给t2,在执行t2对象时t2对象会根据自己的代码对数据加工 t1.print(); #if 0 t1 = t3(5,6);/*注意:在这个过程中,有的C++编译器会产生一个临时变量用于接收t3传过来的值,然后将该临时变量的值赋值给t1,但是在该临时变量 被销毁时也会调用一次析构函数*/ t1 = t2;/*注意这种情况是将t2中的数据复制一份给t1,输出结果t1与t2的值完全相同的*/ #endif t1.print(); system("pause"); return 0; } Struct_func t1 = t2;直接用t2初始化t1; 2)用一个已经初始化的对象作为参数传递到另一个对象 class Struct_func{ public: Struct_func(Struct_func &obj) { a = obj.a+100; b = obj.b+1000; cout << "有参构造函数" << endl; } Struct_func(int _a,int _b) { a = _a; b = _b; cout << "有参构造函数" << endl; } ~Struct_func(void) { cout << "我是析构函数" << endl; } public: void print(void) { cout << "a=:" << a << " b=:" << b; } private: int a; int b; }; int main() { Struct_func t2(9, 0); Struct_func t3(9, 10); /*初始化方式2*/ Struct_func t1(t2); #if 0 Struct_func t1 = t2; t1 = t2;/*注意这种情况是将t2中的数据复制一份给t1,输出结果t1与t2的值完全相同的*/ #endif t1.print(); system("pause"); return 0; } Struct_func t1(t2);将t2以参数的形式传入到t1; 注意 t1 = t2;这种复制操作是不会调用拷贝构造函数的 3)在做参数传递的时候调用拷贝构造函数 4)在返回一个对象是调用拷贝构造函数并创建匿名对象 class Struct_func{ public: Struct_func(Struct_func &obj) { a = obj.a+100; b = obj.b+1000; cout << "拷贝构造函数" << endl; } Struct_func(int _a,int _b) { a = _a; b = _b; cout << "有参构造函数" << endl; } ~Struct_func(void) { cout << "我是析构函数" << endl; } int Get_A(void) { return a; } public: void print(void) { cout << "a=:" << a << " b=:" << b; } private: int a; int b; }; Struct_func constructor() { Struct_func oppa(10, 9);//初始化有参构造函数并调用有参构造函数 return oppa;//创建一个匿名对象并且执行拷贝构造函数,在本程序退出时自动销毁,所以在本程序中会 //一次调用有参构造函数一次调用拷贝构造函数,在函数推出时会调用一次析构函数析构oppa对象,调用一次析构函数 //析构匿名对象 } void disp() { constructor(); } int main() { disp(); system("pause"); return 0; } 可以参考博客地址:http://blog.chinaunix.net/uid-28977986-id-3977861.html
相关 构造函数 PHP中对类进行实例化的同时会调用类的构造函数进行一些初始操作,如为类中的成员变量赋初值,可以说构造函数是类的入口。 创建构造函数 在PHP4.x中构造函数是与 绝地灬酷狼/ 2022年07月30日 13:52/ 0 赞/ 150 阅读
相关 构造函数 前言 看过我之前复习的随笔知道都是基础之上的语法,但是当我脑海开启回忆基础知识时,尤其是构造函数中先后执行顺序以及原因却是模棱两可,于是开始边编写边操笔来记叙下来。如果你 青旅半醒/ 2022年06月17日 10:38/ 0 赞/ 216 阅读
相关 构造函数 构造函数和析构函数是两个非常特殊的函数:它们没有返回值。这与返回值为void的函数显然不同,后者虽然也不返回任何值,但还可以让它做点别的事情,而构造函数和析构函数则不允许。 客官°小女子只卖身不卖艺/ 2022年06月09日 06:21/ 0 赞/ 180 阅读
相关 构造函数 class Person { private String name; private int age; / 阳光穿透心脏的1/2处/ 2022年06月08日 00:44/ 0 赞/ 194 阅读
相关 构造函数 java之构造函数 一、构造函数的作用主要是在类的对象创建时定义初始化的状态,而一个类可以有多个构造函数,以重载的形式存在。不能使用构造器名称来调用另一个构造器,而是应该 刺骨的言语ヽ痛彻心扉/ 2022年06月02日 10:21/ 0 赞/ 212 阅读
相关 构造函数 构造函数特点: 函数名与类名相同、不用定义返回值类型、没有return语句、构造函数可以有多个并以重载的方式存在 构造函数的作用: 给new出来的对象进行初始化 末蓝、/ 2022年06月01日 09:23/ 0 赞/ 200 阅读
相关 构造函数 这里假设类名为Complex 无参数构造函数 系统自动生成默认的无参构造函数,函数为空 Complex(void) { m_re 灰太狼/ 2022年05月09日 04:28/ 0 赞/ 233 阅读
相关 构造函数 1、什么是构造函数? > 构造函数是一种特殊的函数,主要用来创建对象的初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中,特别的是一个类可以 港控/mmm°/ 2022年05月05日 09:46/ 0 赞/ 204 阅读
相关 构造函数 -------------------- 先来说构造函数吧,在谈构造函数之前还是根据自己之前对面向对象的“类与对象”的概念引入之后的再来讨论这个问题,之前我们说过世间的 绝地灬酷狼/ 2022年02月03日 11:04/ 0 赞/ 240 阅读
相关 构造函数 什么时候定义构造函数? > 当分析事物时,该事物存在具备一些特性或行为,那么将这些内容定义在构造函数中。 构造函数特点: 函数名与类名相同 不用定义返回值类型 旧城等待,/ 2021年09月14日 08:54/ 0 赞/ 331 阅读
还没有评论,来说两句吧...