C++笔记之两个类的实例之间传递参数——通过构造函数传递类对象的方法详细探究

C++笔记之两个类的实例之间传递参数------通过构造函数传递类对象的方法详细探究

code review!

文章目录

1.传递对象的const引用------ClassB的实例只能访问ClassA的实例,但不会修改ClassA的实例

代码

cpp 复制代码
class ClassA {
public:
    ClassA(int value) : memberA(value) {}
private:
    int memberA;
};

class ClassB {
public:
    ClassB(const ClassA& aInstance) : memberB(aInstance) {}
private:
    ClassA memberB;
};

int main() {
    ClassA objA(42);
    ClassB objB(objA);
    return 0;
}

2.传递对象的非const引用------ClassB的实例既可以访问ClassA的实例,也可以修改ClassA的实例

代码

cpp 复制代码
class ClassA {
public:
    ClassA(int value) : memberA(value) {}
    void doSomething() {
        // 做一些操作
    }
private:
    int memberA;
};

class ClassB {
public:
    ClassB(ClassA& aInstance) : memberB(aInstance) {
        // 在这里可以修改 aInstance 的状态
        aInstance.doSomething();  // 调用 ClassA 的方法
    }
private:
    ClassA& memberB;
};

int main() {
    ClassA objA(42);
    ClassB objB(objA);
    return 0;
}

3.传递对象的指针------ClassB的实例既可以访问ClassA的实例,也可以修改ClassA的实例

代码

cpp 复制代码
class ClassA {
public:
    ClassA(int value) : memberA(value) {}
    void doSomething() {
        // 做一些操作
    }
private:
    int memberA;
};

class ClassB {
public:
    ClassB(ClassA* aInstance) : memberB(aInstance) {
        // 在这里可以使用 memberB 指针来操作 aInstance
        memberB->doSomething();  // 调用 ClassA 的方法
    }
private:
    ClassA* memberB;
};

int main() {
    ClassA objA(42);
    ClassB objB(&objA);  // 传递指向 objA 的指针
    return 0;
}

4.传递对象的指针并在堆上初始化该对象

代码

cpp 复制代码
class ClassA {
public:
    ClassA(int value) : memberA(value) {}
    void doSomething() {
        // 做一些操作
    }
private:
    int memberA;
};

class ClassB {
public:
    ClassB() : memberB(nullptr) {
        // 在构造函数中初始化 memberB 在堆上分配的对象
        memberB = new ClassA(0); // 在这里可以使用适当的参数来初始化 ClassA
    }

    // 析构函数中释放成员变量指向的内存
    ~ClassB() {
        delete memberB;
    }

    void performAction() {
        if (memberB) {
            memberB->doSomething();
        }
    }

private:
    ClassA* memberB;
};

int main() {
    ClassB objB;
    objB.performAction();  // 调用 memberB 对象的方法
    return 0;
}

5.传递对象的指针并在堆上初始化该对象(非通过构造函数传递参数)

代码

cpp 复制代码
class ClassA {
public:
    ClassA(int value) : memberA(value) {}
    void doSomething() {
        // 做一些操作
    }
private:
    int memberA;
};

class ClassB {
public:
    ClassB() : memberB(nullptr) {}

    // 析构函数中释放成员变量指向的内存
    ~ClassB() {
        delete memberB;
    }

    void init(ClassA* aInstance) {
        // 在堆上分配内存并进行初始化
        memberB = new ClassA(*aInstance);
    }

    void performAction() {
        if (memberB) {
            memberB->doSomething();
        }
    }

private:
    ClassA* memberB;
};

int main() {
    ClassA objA(42);
    ClassB objB;
    objB.init(&objA);  // 在堆上分配内存并初始化 memberB
    objB.performAction();  // 调用 memberB 对象的方法
    return 0;
}

6.关于深浅拷贝

相关推荐
zh路西法4 分钟前
【C++决策和状态管理】从状态模式,有限状态机,行为树到决策树(二):从FSM开始的2D游戏角色操控底层源码编写
c++·游戏·unity·设计模式·状态模式
stm 学习ing8 分钟前
HDLBits训练6
经验分享·笔记·fpga开发·fpga·eda·verilog hdl·vhdl
向阳121824 分钟前
mybatis 缓存
java·缓存·mybatis
.Vcoistnt29 分钟前
Codeforces Round 994 (Div. 2)(A-D)
数据结构·c++·算法·贪心算法·动态规划
上等猿30 分钟前
函数式编程&Lambda表达式
java
小k_不小37 分钟前
C++面试八股文:指针与引用的区别
c++·面试
stm 学习ing41 分钟前
HDLBits训练4
经验分享·笔记·fpga开发·课程设计·fpga·eda·verilog hdl
沐泽Mu1 小时前
嵌入式学习-QT-Day07
c++·qt·学习·命令模式
蓝染-惣右介1 小时前
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
java·设计模式
炸毛的飞鼠1 小时前
汇编语言学习
笔记·学习