首页 > 编程语言 >C++构造函数【cherno课程学习】

C++构造函数【cherno课程学习】

时间:2023-01-11 15:57:25浏览次数:44  
标签:cherno Log void float C++ Entity public 构造函数

C++构造函数

无参构造函数

首先创造一个Entity类,在类里面有两个变量x, y以及一个方法

#include <iostream>

class Entity{
public:
    float X, Y;

    void Print(){
        std::cout << X << ", " << Y << std::endl;
    }
};

int main() {

    Entity e;
    std::cout << e.X << std::endl;//会出现警告,使用未初始化的值
    e.Print(); //会打印出 X,Y的值



    std::cin.get();
    return 0;
}

所以我们需要一种方法,当构造Entity实例时,我们想要把X,Y设为零,除非已经指定了其他的值。

  1. 方法一,定义一个Init()函数进行初始化

    #include <iostream>
    
    class Entity{
    public:
        float X, Y;
    
        void Init(){//定义了初始化的方法
            X = 0.0f;
            Y = 0.0f;
        }
        void Print(){
            std::cout << X << ", " << Y << std::endl;
        }
    };
    
    int main() {
    
        Entity e;
        e.Init();
        std::cout << e.X << std::endl;//会出现警告,使用未初始化的值
        e.Print(); //会打印出 X,Y的值
        
        std::cin.get();
        return 0;
    }
    
    
  2. 构造函数方法
    是一种特殊类型的方法,每次你构造一个对象时,都会调用的方法,没有返回类型,并且他的名称必须与类的名称相同

    #include <iostream>
    
    class Entity{
    public:
        float X, Y;
    
        Entity(){		//构造函数
            X = 0.0f;
            Y = 0.0f;
        }
    
        void Print(){
            std::cout << X << ", " << Y << std::endl;
        }
    };
    
    int main() {
    
        Entity e;
        std::cout << e.X << std::endl;//会打印出 X,Y的值
        e.Print(); //会打印出 X,Y的值
    
        std::cin.get();
        return 0;
    }
    
    
  3. 如果没有指定构造函数,实际上会有默认的构造函数,但是它实际上什么都不会做

    class Entity{
    public:
        float X, Y;
    
        Entity(){//默认构造函数
           
        }
    
        void Print(){
            std::cout << X << ", " << Y << std::endl;
        }
    };
    

有参构造函数

一个类里面可以有很多构造函数,前提是他们的参数不同,实际上,这就是函数的重载

#include <iostream>

class Entity{
public:
    float X, Y;

    Entity(){

    }
    Entity(float x, float y){
        X = x;
        Y = y;
    }

    void Print(){
        std::cout << X << ", " << Y << std::endl;
    }
};

int main() {

    Entity e(10.0f, 5.0f); //这里调用了有参构造器

    e.Print(); //会打印出 10, 5

    std::cin.get();
    return 0;
}

拒绝用户进行实例化

当不想让用户对类进行实例化的时候,也就是只能通过作用域类进行可以通过隐藏构造函数

class Log{
private:
    Log(){

    }
public:
    static void Write(){

    }
};
int main() {

    Log::Write();//只能使用这种方法
    Log L;//这里会报错,显示调用私有构造器

}

默认构造器删除

cpp为我们提供了默认构造器,但我们可以选择不要他

class Log{

public:
    Log() = delete;//这句表示删除默认构造器
    
    static void Write(){

    }
};
int main() {

    Log::Write();//只能使用这种方法
    Log L;// 这里会出错,因为默认构造器不存在

}

可以这样思考,对一个类进行实例化的时候,必须有构造器,CPP为我们提供了默认的构造器,但是他什么都不会做。

C++析构函数

销毁对象时候使用,卸载变量等东西,并清理使用过的内存

#include <iostream>

class Entity{
public:
    float X, Y;

    Entity(){
        X = 0.0f;
        Y = 0.0f;
        std::cout << "Created Entity!" << std::endl;
    }
    Entity(float x, float y){
        X = x;
        Y = y;
    }

    ~Entity(){
        std::cout << "Destroyed Eneity!" << std::endl;
    }
    void Print(){
        std::cout << X << ", " << Y << std::endl;
    }
};

void Function(){
    Entity e;
    e.Print(); 
}
int main() {
    Function();
    std::cin.get();
    return 0;
}

标签:cherno,Log,void,float,C++,Entity,public,构造函数
From: https://www.cnblogs.com/jackjie/p/17043991.html

相关文章

  • c++ 利用 chrono 打印时间
    c++利用chrono打印时间自己封装的一个打印时间的类,可以打印秒、毫秒、微秒、纳秒。头文件#ifndefTIMER_H#defineTIMER_H#include<chrono>enumclassType{......
  • 手撕AVL树(C++)
    阅读本文前,请确保您已经了解了二叉搜索树的相关内容(如定义、增删查改的方法以及效率等)。否则,建议您先学习二叉搜索树。本文假定您对二叉搜索树有了足够的了解。效率?众所......
  • 数组描述线性表(C++实现)
    线性表也称有序表,其每一个实例都是元素的一个有序集合抽象类linearList一个抽象类包含没有实现代码的成员函数,这样的成员函数称为纯虚函数,用数字0作为初始值来说明templ......
  • C++_运算符重载
    operatoroverloadingCustomizestheC++operatorsforoperandsofuser-definedtypes.std::addressofstd::addressof模板函数定义在<memory>头文件中,用于获取类或......
  • 怎么在C++中调用Python?C++调用python封装接口实例解析!
    看到标题很多小伙伴会问:不是都说python是胶水语言,他调用什么什么语言封装的库来做一些什么事情吗?怎么小编你这反而变成被调用的对象了呢?没错,常规情况下一般都是以python语......
  • Python实例浅谈之三Python与C/C++相互调用
    一、问题     Python模块和C/C++的动态库间相互调用在实际的应用中会有所涉及,在此作一总结。二、Python调用C/C++1、Python调用C动态链接库       P......
  • C++_语言概览和资料
    C++C语言1969年-1973年完成,其出发点是为了编写Unix操作系统设计目标需求、背景和待解决问题 演化过程中,来自用户的反馈和语言实现者们积累的经验设计哲学:高效......
  • 浅析 C++ 调用 Python 模块
    作为一种胶水语言,Python 能够很容易地调用 C 、 C++ 等语言,也能够通过其他语言调用 Python 的模块。Python 提供了 C++ 库,使得开发者能很方便地从 C++ 程序中......
  • C++ STL摘记
    一、string类补充1.函数示例:(1)find和rfind函数,返回的是下标或者string::nposindex=ss.find(s1,pos,num)find从pos(包括)开始往右查找(num的作用待补充)index=s......
  • c++重要的概念部分
    1.const修饰指针#include<iostream>usingnamespacestd;intmain(){//1、const修饰指针指针常量inta=10;intb=20;int*constp=&a;//指针......