C++面向对象-new一个对象出来

目录

零. 简介

一. new  和 不 new 的区别

二. 访问修饰符

三.类构造函数 & 析构函数

构造函数:

a.无参

b.有参

析构函数:

四.总结示例


零. 简介

在 C++中,类(Class)是一种用户自定义的数据类型,它用于描述具有相似属性和行为的对象。

类定义了对象的属性(成员变量)和行为(成员函数)。

对象(Object)是类的实例,它是根据类的定义创建的具体实体。

一. new  和 不 new 的区别

在 C++中,不使用 new 直接声明对象和使用 new 动态分配内存创建对象有以下一些区别:

  1. 内存分配时机:不使用 new 是在栈上分配内存,而使用 new 是在堆上分配内存。
  2. 内存管理:栈上的内存由编译器自动管理,对象超出作用域时自动销毁。而堆上的内存需要手动使用 delete 释放。
  3. 大小限制:栈的空间通常有限,而堆的空间相对较大。
  4. 生命周期:栈上对象的生命周期与作用域相关,而堆上对象的生命周期由程序员控制。

以下是一个示例代码,展示了使用 new 和不使用 new 的区别:

// 不使用 new
猫  小红;  // 在栈上创建对象

// 使用 new
猫 *小红指针 = new 猫;  // 在堆上创建对象

二. 访问修饰符

C++ 中的访问修饰符用于控制类成员(包括成员变量和成员函数)的访问权限。常见的访问修饰符有:

  1. public:表示公有访问权限,允许在类外部访问。
  2. protected:表示保护访问权限,只能在类自身和派生类中访问。
  3. private:表示私有访问权限,只能在类内部访问。

以下是一个示例代码,展示了不同访问修饰符的使用:

class Student {
public:  //公开
    void setName(const std::string& name) { m_name = name; }

protected: //保护 
    std::string m_name;

private: //私有
    int m_age;
};

调用:

三.类构造函数 & 析构函数

构造函数

  • 用于创建对象时进行初始化。
  • 可以有默认构造函数、带参数的构造函数等。

示例代码:

a.无参

        class Student {
        public:
            Student() {
                std::cout << "Default constructor called." << std::endl;
            }
        };

b.有参

代码

#include<iostream>
#include<vector>
#include <string>


class Student {
public:  //公开
    Student(std::string name) {
        m_age = 18;
        m_name = name;
    }
    void getName() { 
        std::cout << "名字"<< m_name <<std::endl;
        std::cout << "年龄" << m_age << std::endl;
    }

protected: //保护 
    std::string m_name;

private: //私有
    int m_age;
};

int main() {

    Student student("xiao hong");
    student.getName();
    

    return 0;
}

析构函数

在对象销毁时被调用。

用于释放资源或进行其他清理工作。

示例代码:

        class Student {
        public:
            ~Student() {
                std::cout << "销毁" << std::endl;
            }
        };

代码

#include<iostream>
#include<vector>
#include <string>


class Student {
public:  //公开
    Student() {
        std::cout << "开始创建" << std::endl;
        std::cout << "构造函数"  << std::endl;
    }
    ~Student() {
        std::cout << "销毁" << std::endl;
        std::cout << "析构函数" << std::endl;
    }
};

int main() {

  //  Student student   ("xiao hong");
    Student* student = new Student();
    delete(student);
    

    return 0;
}

四.总结示例

代码:

#include<iostream>
#include<vector>
#include <string>


class Student {
public:  //公开
    std::string m_name;
    Student() {
        std::cout << "开始创建" << std::endl;
        std::cout << "构造函数"  << std::endl;
        m_age = 18;
    }
    ~Student() {
        std::cout << "销毁" << std::endl;
        std::cout << "析构函数" << std::endl;
    }

   void GetName() {
        std::cout << "名字" << m_name << std::endl;
        std::cout << "年龄" << m_age << std::endl;
    }

private:
    int m_age;
};

int main() {

  //  Student student   ("xiao hong");
    Student* student = new Student ;
    student->m_name = "xiao hong";
    student->GetName();

    delete(student);
    

    return 0;
}

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一然明月(全栈)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值