栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C++碎碎念】面向对象(深拷贝与浅拷贝、类对象作为类成员、this指针)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C++碎碎念】面向对象(深拷贝与浅拷贝、类对象作为类成员、this指针)

一、深拷贝与浅拷贝

1、深拷贝:拷贝的时候先开辟出和源对象大小一样的内存空间,然后将源对象里的内容拷贝到目标对象中,这样两个指针就指向了不同的内存地址,但是里面的内容是一样的。这样不但达到了我们想要的目的,还不会出问题。两个指针先后去调用析构函数,分别释放自己所指向的位置。即每次增加一个指针就意味着申请一块新的内存,并让这个指针指向新的内存,深拷贝的情况下不会出现重新释放同一块内存的错误。

2、浅拷贝:又称值拷贝,将 源对象的值拷贝到目标对象中去,本质上说源对象和目标对象共用一块实体,只是所引用的变量名不一样,但还是同样的地址。

3、深拷贝的实现:深拷贝的拷贝构造函数和赋值运算符的重载

Person(const char *name)
{
    m_Name = new char[strlen(name)+1];//先开辟出和源对象一样大的内存区域
    strcpy(m_Name,name);//然后将需要拷贝的数据赋值到目标拷贝对象中
}
~Person()
{
    if(m_Name != NULL)
    {
        delete[] m_Name;//不会出现重复释放同一块内存的错误
        m_Name = NULL;
    }
}

二、类对象作为类成员

当其他类对象作为本类中的成员:

构造的顺序:先调用其他类的构造函数,再调用本类的构造函数;

        析构的顺序:和构造的顺序正好相反。

#include 
using namespace std;
class Phone{
public:
    string m_phone;
    Phone(){}
    ~Phone(){}
};
class Game{
public:
    string m_game;
    Game(){}
    ~Game(){}
};
class Person{
public:
    string m_person;
    Game m_game;//用类对象来定义变量
    Phone m_phone;//用类对象来定义变量
    Person(string name,string pname,string gname){
    cout<<"姓名:"< 

 

 三、静态成员

在类定义中,他的成员(成员变量和成员方法),这些成员都可以用关键字static进行声明

特点:不管这个类创建了多少个对象,静态成员只有一个拷贝。这个拷贝被所有属于这个类的对象所共享。

静态成员变量:

        1、必须在类中声明,在类外定义;

        2、静态成员变量不属于某个对象,而是属于类,所有对象共享;

        3、静态成员变量可以通过类名或者对象名来获取。

静态成员函数:

        1、静态的成员函数只能访问静态的成员变量;

        2、普通的成员函数可以访问静态的或者非静态的成员变量、成员函数;

        3、可以通过类名或者对象名来访问。

class Person{
public:

    int m_A;//普通的成员变量
    static int m_B;//静态的成员变量

    static void fun()//静态成员函数
    {
        m_B = 200;
        cout<<"静态成员函数被调用了"<class Person{
public:
    string name;
    int age;
Person(string name, int age) {
		this->name = name;
		this->age = age;
	}
};

        2、在类的非静态成员方法中返回对象本身,可以使用return *this

Person& getOlder(Person& p) {
		if (age > p.age) {
			return *this;
		}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/876260.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号