构造和析构的基础知识

前言

创建一个对象时,常常需要做某些初始化的工作,例如对数据成员赋值,注意,类的数据成员是不能在声明类时初始化的

为了解决这个问题,C++编译器提供了 构造函数 来处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行。

2、构造函数的分类(三个)

(1)无参构造函数

      Test()
      {
               ;
      }

(2)带参数构造函数

      Test(int a,int b)
      {
                ;
      }

(3)赋值构造函数

      Test(const Test &obj)
      {
                ;
      }

构造函数的调用

#include <iostream>
using namespace std;

class Test
{
public:
    Test()          //无参构造函数
    {
        m_a = 0;
        m_b = 0;
        cout << "无参构造函数" << endl;
    }
    
    Test(int a)      //一个参数的有参构造函数
    {
        m_a = a;
        m_b = b;
    }
    
    Test(int a,int b)  //有参构造函数       //调用有参构造函数有三种方法
    {
        m_a = a;
        m_b = b;
        cout << "有参构造函数" << endl;
    }
    
    Test(const Test& obj)   //赋值构造函数(copy构造函数)
    {
        cout << "我也是构造函数" << endl;
    }
public:
    void print()
    {
        cout << "普通成员函数" << endl;
    }
protected:    
private:
    int m_a;
    int m_b;
}

void main()
{
    Test t1;   //无参构造函数的调用  (对象后什么都不写)
    
    //有参函数的第一种调用方法  括号法
    
    Test t1(1,2);  //调用两个参数的构造函数   
    t1.ptint();
    
    //有参函数的第二种调用方法  =号法   (=操作不再是C语言中的功能。C++对= 进行了功能性增强)
    
    Test t2 = (3,4);  //调用一个参数的构造函数  因为()号里是逗号表达式,结果为 4;即最后一个数    
    t2.print();
    
    Test t3 = 4;
    t2.print();      //跟 Test t2 = (3,4) 效果是一样的
    
    //有参函数的第三种调用方法  手动的调用构造函数
    Test t4 = Test(1,2);     //调用了有两个参数的构造函数
                             //直接调用构造函数,会产生匿名对象(涉及到匿名对象的去和留)
    
    cout << "hello" << endl;
}
时间: 2024-10-26 14:30:51

构造和析构的基础知识的相关文章

[基础] Java目录(摘自Java核心技术·卷1 基础知识)

Java核心技术·卷1 基础知识(原书第9版) 第1章 Java程序设计概述 1.1 Java程序设计平台 1.2 Java"白皮书"的关键术语 1.2.1 简单性 1.2.2 面向对象 1.2.3 网络技能 1.2.4 健壮性 1.2.5 安全性 1.2.6 体系结构中立 1.2.7 可移植性 1.2.8 解释型 1.2.9 高性能 1.2.10 多线程 1.2.11 动态性 1.3 Java applet与Internet 1.4 Java发展简史 1.5 关于Java的常见误解

设计模式学习笔记-基础知识篇

1. 设计模式的重要性 1.1 设计模式解决的是在软件过程中如何来实现具体的软件功能.实现同一个功能的方法有很多,哪个设计容易扩展,容易复用,松耦合,可维护?设计模式指导我们找到最优方案. 1.2 设计中往往会存在设计缺陷,这些缺陷包括: 僵化性:难以对软件进行改动,即使在功能上来看是很小的改动 脆弱性:在进行很小的改动时,可能导致很多地方出现问题 顽固性:要把系统中某些通用的功能分离出来的努力和风险非常巨大 粘滞性:当面临改动时,改动的方案有很多,一些会保持设计,一些会破坏设计,当采用保持设计

Boost::Thread 多线程的基础知识

Boost.Thread可以使用多线程执行可移植C++代码中的共享数据.它提供了一些类和函数来管理线程本身,还有其它一些为了实现在线程之间同步数据或者提供针对特定单个线程的数据拷贝.头文件:#include <boost/thread.hpp> 线程定义boost::thread 类是负责启动和管理线程.每个boost::thread对象代表一个单独的执行线程,是不可拷贝的.由于它是可以被移动到,所以它们可以被保存到会改变大小的容器中,并且从函数返回.这使得线程创建的详细信息可以被封装到一个函

C++基础知识学习笔记

基本语法 C面向过程思想:程序=(数据结构)+(算法) 数据结构与算法分离,以算法(函数)为主. C++面向对象思想:程序=(数据结构+算法) 数据结构(属性)与算法(操作)绑成一个类,定义一个个对象对象=(数据结构+算法)  ,程序=(对象+对象+对象+--) 面向对象程序设计的程序员有两类:1.面向对象应用程序设计2.类库的设计 头文件:类的声明            ---类的外部接口       (成员函数在类声明中实现时,一般很简短,默认为内联函数)源文件:类的成员函数定义     -

5-24 c++语言之【基础知识】

最近一段时间继续开始了c++的学习,作为c plus plus 难免会与c语言做一个对比,很明显的感受到c++语言注重代码的复用性和拓展性,而c语言更加注重其算法的高效性,这也是今后需要注意的地方,避免用c++语言写出c语言的思想,接下来就是正文 关于c++的语言特点: c++是一门面向对象的语言(很重要) 面向对象的三大特点(封装,继承,多态) c++库函数的头文件没有.h endl 换行并清空缓冲区 第一个,命名空间作用域 首先  :: 为作用域运算符(其中一个用法),在初写c++程序中有这

C++ 基础知识汇总 持续更新

摘录一些C++面试常考问题,写一些自己的理解,欢迎来摘果子. static关键字 用于声明静态对象: 静态函数只在本文件可见.(默认是extern的) 全局静态对象:全局静态对象,存储在全局/静态区,作用域整个程序,在程序结束才销毁: 局部静态对象:在函数内部加上static声明的变量,在首次调用时初始化,然后一直驻留在内存,作用域是该函数,可用于函数调用计数(primary有例子),程序结束释放: 静态数据成员:归属于类,类对象共享,类外初始化,类对象可访问: 静态函数成员:归属于类,只能访问

SWIG 3 中文手册——5. SWIG 基础知识

目录 5 SWIG 基础知识 5.1 运行 SWIG 5.1.1 输入格式 5.1.2 SWIG 输出 5.1.3 注释 5.1.4 C 预处理器 5.1.5 SWIG 命令 5.1.6 解析限制 5.2 包装简单的 C 声明 5.2.1 处理基本类型 5.2.2 全局变量 5.2.3 常量 5.2.4 一点关于 const 的文字 5.2.5 char * 的注意事项 5.3 指针与复杂对象 5.3.1 简单指针 5.3.2 运行时指针类型检查 5.3.3 派生类型.结构体和类 5.3.4 未

第二章 TCP/IP 基础知识

? TCP/IP ?transmission control protocol and ip internet protocol 是互联网众多通信协议中最为著名的. ? 2.2 TCP/IP 的标准化 2.2.2 TCP/IP 标准化精髓 TCP/IP 协议始终具有很强的实用性. 相比于TCP/IP ,OSI 之所以未能达到普及,主要原因在于未能尽早的制定可行性较强的协议.未能提出应对技术快速更新的协议以及没有能及时进行后期的改良的方案. 2.2.3 TCP/IP 规范 --RFC 那些需要标准

服务器架设笔记——Apache模块开发基础知识

通过上节的例子,我们发现Apache插件开发的一个门槛便是学习它自成体系的一套API.虽然Apache的官网上有对这些API的详细介绍,但是空拿着一些零散的说明书,是很难快速建立起一套可以运行的系统.(转载请指明出于breaksoftware的csdn博客) 为了实现最基础的URL解析等功能,我把<Apache模块开发指南>一书粗略了翻看了两遍,以利于迅速了解Apache模块编程的相关知识.至于书中具体的知识点,我并不在此赘述.但是为了便于大家了解之后遇到的各种相关的知识点,我大致罗列几条(摘