【深入理解C++中的类和对象1】

深入理解C++中的类和对象

1. 类的定义

在C++中,类使用class关键字来定义。类定义如下:

class Hero {
    // 类的成员变量和方法
};

2. 成员属性

C++类有三个主要的访问控制符:publicprivateprotected。这些控制符决定了类成员和方法的可见性和可访问性。

  • Public(公共):在public下声明的成员可以从类的外部访问。
  • Private(私有):在private下声明的成员只能在类的内部访问。
  • Protected(保护):在继承中使用时,子类可以访问。

在代码中,构造函数和一些方法是公共的,而成员变量是私有的。

3. 构造函数

构造函数在对象创建时被调用,用于初始化对象。以下展示两种构造函数:

  • 无参数构造函数

    Hero() {
        m_name = " ";
        m_SkillCount = 4;
        m_Blood = 300;
        cout << "The parameterless constructor is complete" << endl;
    }
    

    这个构造函数在没有参数时被调用,初始化成员变量。

  • 有参数构造函数

    Hero(string name, int Blood) {
        m_name = name;
        m_SkillCount = 4;
        m_Blood = Blood;
        cout << "Constructor 1 with arguments completes" << endl;
    }
    

    这个构造函数在传入参数时被调用,根据参数值初始化成员变量。

4. 成员变量

成员变量声明在private部分,只能通过公共方法访问和修改:

  • m_name:可以读写
  • m_SkillCount:只读
  • m_Blood:只写

5. 调用接口

  • 设置和读取名称

    void setName(string name) {
        m_name = name;
    }
    
    string readName() {
        return m_name;
    }
    
  • 读取技能数量

    int readSkillCount() {
        return m_SkillCount;
    }
    
  • 设置血量

    void setBlood(float number) {
        if (number < 100 || number > 500) {
            cout << "This is an illegal setting" << endl;
            return;
        }
        m_Blood = number;
    }
    

6. 对象实例化

main函数中,通过多种方式实例化对象:

int main() {
    // 实例化一个对象
    Hero ming;
    ming.setName("ming");
    cout << "The hero's name is " << ming.readName() << endl;
    cout << "The Hero's number of skill is " << ming.readSkillCount() << endl;
    ming.setBlood(666);  // 无效的血量设置
    ming.setBlood(333);  // 有效的血量设置

    // 不同的实例化方式
    Hero h1;                     // 调用无参数构造函数
    Hero h2("ming", 400);        // 调用有参数构造函数
    Hero h3 = Hero{"ming", 330}; // 调用有参数构造函数
    Hero h4{"ming", 200};        // 调用有参数构造函数
    Hero h5{};                   // 调用无参数构造函数

    return 0;
}
  • Hero ming;:调用无参数构造函数。
  • Hero h1;:同样调用无参数构造函数。
  • Hero h2("ming", 400);:调用有参数构造函数。
  • Hero h3 = Hero{"ming", 330};:使用初始化列表的方式调用有参数构造函数。
  • Hero h4{"ming", 200};:使用直接列表初始化调用有参数构造函数。
  • Hero h5{};:使用列表初始化调用无参数构造函数。

代码总结

// 包含输入输出流和字符串库
#include <iostream>
using std::cout;
using std::endl;
using std::string;

// Hero 类的定义
class Hero {
public:
    // 无参数构造函数
    Hero() {
        m_name = " ";        // 初始化英雄名为空格
        m_SkillCount = 4;    // 初始化技能数量为4
        m_Blood = 300;       // 初始化血量为300
        cout << "The parameterless constructor is complete" << endl;  // 输出构造函数完成消息
    }
    
    // 有参数构造函数
    Hero(string name, int Blood) {
        m_name = name;       // 使用参数初始化英雄名
        m_SkillCount = 4;    // 初始化技能数量为4
        m_Blood = Blood;     // 使用参数初始化血量
        cout << "Constructor 1 with arguments completes" << endl;  // 输出构造函数完成消息
    }

private:
    string m_name;       // 英雄名,可读、可写
    int m_SkillCount;    // 技能数量,只读
    int m_Blood;         // 血量,只写

public:
    // 设置英雄名
    void setName(string name) {
        m_name = name;
    }
    
    // 读取英雄名
    string readName() {
        return m_name;
    }
    
    // 读取技能数量
    int readSkillCount() {
        return m_SkillCount;
    }
    
    // 设置血量(在100到500之间有效)
    void setBlood(float number) {
        if (number < 100 || number > 500) {  // 如果血量不在有效范围内
            cout << "This is an illegal setting" << endl;  // 输出非法设置消息
            return;  // 直接返回,不进行设置
        }
        m_Blood = number;  // 设置血量为传入的参数值
    }
};

int main() {
    // 实例化一个对象 ming,调用无参数构造函数
    Hero ming;
    ming.setName("ming");  // 设置英雄名为 "ming"
    cout << "The hero's name is " << ming.readName() << endl;  // 输出英雄名
    cout << "The Hero's number of skill is " << ming.readSkillCount() << endl;  // 输出技能数量
    ming.setBlood(666);  // 尝试设置血量为 666(超出有效范围)
    ming.setBlood(333);  // 设置血量为 333(在有效范围内)

    // 不同的对象实例化方式
    Hero h1;                     // 调用无参数构造函数
    Hero h2("ming", 400);        // 调用有参数构造函数,设置英雄名为 "ming",血量为 400
    Hero h3 = Hero{"ming", 330}; // 调用有参数构造函数,使用初始化列表方式设置英雄名为 "ming",血量为 330
    Hero h4{"ming", 200};        // 调用有参数构造函数,使用直接列表初始化设置英雄名为 "ming",血量为 200
    Hero h5{};                   // 调用无参数构造函数

    return 0;  // 返回主函数结束
}

运行结果

在这里插入图片描述

说明: 本人所写的有关C++面向对象的相关代码是跟着英雄编程的相关课程,自己编写,如有侵权,请与我私下协商。

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值