【带头学C++】----- 九、类和对象 ---- 9.1 类和对象的基本概念----(9.1.1---9.1.3)

目录

9.1 类和对象的基本概念

9.1.1 类的封装性

9.1.2 定义类的步骤和方法

9.1.3 设计一个学生类 Student


9.1 类和对象的基本概念

9.1.1 类的封装性

       类是一种用户自定义的数据类型,它定义了一组数据成员和成员函数。类可以看作是一个模板或者蓝图,用于创建对象。类将具有共性的数据和方法封装在一起,加以权限区分,用户只能通过公共方法 访问私有数据。 

     这里我的另外一个理解是这样的:类就像是一个学生类别、每个具体的张三、李四学生就是一个对象,对象就有不同的属性,不同的姓名、身高、体重、性别、年龄这些特征,比如张三会武术、李四会跳舞、王五会吃土等等,你的类就是相当于一个空白的模板,把这些属性汇合到一起以后,同过这个类名称来创建张三、李四对象,每一个对象都可以拥有不一样的身高体重等等,这里只是举个例子,实际上类和对象的作用比上面说的要大很多。并且类中的不同函数、方法的权限不一,更加的多元化,满足不同需求。

       对象则是类的实例化结果,它是类的具体实体,具有类定义中定义的数据成员和行为(成员函数)。

       我们编写程序的目的是为了解决现实中的问题,而这些问题的构成都是由各种事物组成,我们在计算机中要解决这种问题,首先要做就是要将这个问题的参与者:事和物抽象到计算机程序中,也就是用程序语言表示现实的事物。那么现在问题是如何用程序语言来表示现实事物?现实世界的事物所具有的共性就是每个事物都具有自身的属性,一些自身具有的行为,所以如果我们能把事物的属性和行为表示出来,那么就可以抽象出来这个事物。
      类的权限分为: private (私有)、protected (保护) 、public (公有) 3种权限。

       在类的外部,只有public修饰的成员才能被访问,在没有涉及继承与派生时,private和protected是同等级的,外部不允许访问。用户在类的外部可以通过public的方法间接访问private和protected数据

9.1.2 定义类的步骤和方法

定义类的关键字:class

设计一个类步骤: 思考该类有哪些数据成员 操作这些数据的成员函数 数据一般默认都是设计成私有, 成员函数为公有,通过成员函数操作数据,来实现对类和对象的一些操作。

注意,私有、保护成员变量不能直接在类的外部进行访问 

完整代码:

#include <iostream>

using namespace std;

class Data{
    //类中默认为私有
private:
    int a; //私有成员变量,不用给类中成员初始化
protected:
    int b;//受保护的成员变量
public:
    int c;//公有的成员变量
    //在类的内部,不分权限之分
    void printData(void){
        cout << a << " " << b << " " << c <<endl;
    }
};


int main()
{
    //用类实例化一个对象
    Data dataer;
    //类外部(“{}”介于花括号之间的属于类的内部)不能直接访问私有、受保护的成员变量
//    cout << dataer.a <<endl;
//    cout << dataer.b <<endl;
    cout << dataer.c <<endl;

    //类中的成员函数,需要通过对象名来调用
    dataer.printData();

    return 0;
}

9.1.3 设计一个学生类 Student

题目:学生信息管理系统

设计一个学生类 Student,包含以下成员:

数据成员:

  • 学生姓名(name)
  • 学生学号(id)

成员函数:

  • 构造函数:带有学号和姓名的参数列表,用于初始化学生对象的数据成员。
  • void setInfo(const std::string& n, const std::string& i):设置学生的姓名和学号。
  • std::string getName():返回学生的姓名。
  • std::string getId():返回学生的学号。

根据上述要求,设计并实现 Student 类,然后编写一个测试程序,在测试程序中创建多个学生对象,并调用相应的成员函数来设置和获取学生的姓名和学号。

完整代码:


#include <iostream>
#include <string>

class Student {
private:
    std::string name; // 学生姓名
    std::string id; // 学生学号
public:
    // 构造函数,用于初始化学生对象的数据成员
    Student(const std::string& n, const std::string& i) {
        name = n;
        id = i;
    }
    // 设置学生的姓名和学号
    void setInfo(const std::string& n, const std::string& i) {
        name = n;
        id = i;
    }
    // 返回学生的姓名
    std::string getName() {
        return name;
    }
    // 返回学生的学号
    std::string getId() {
        return id;
    }
};

void test02(){
    // 创建两个学生对象,分别设置姓名和学号
    Student student1("Alice", "12345");
    Student student2("Bob", "67890");

    // 输出学生1的姓名和学号
    std::cout << "Student 1: " << student1.getName() << " (" << student1.getId() << ")" << std::endl;
    // 输出学生2的姓名和学号
    std::cout << "Student 2: " << student2.getName() << " (" << student2.getId() << ")" << std::endl;

    // 更新学生1的姓名和学号
    student1.setInfo("Eve", "54321");

    // 输出更新后的学生1的姓名和学号
    std::cout << "Student 1 (updated): " << student1.getName() << " (" << student1.getId() << ")" << std::endl;

}

引用千峰教育C++基础班笔记案例和内容,并作了补充和修改

案例:

      请设计一个Person类,Person类具有name和age属性,提供初始化函数(nit),并提供对name和age的读写函数(set,get),但必须确保age的赋值在有效范围内(0-100),超出有效范围,则拒绝赋值,并提供方法输出姓名和年龄。

说明:

代码:(原出处中对代码的标准使用是基于C++98版本的,所以我这里此后全部基于C++11以及11以上的标准进行改写,说明,同时能直接掌握c++11标准用法)

class Person
{
private:
    const char *m_Name;//私有的   c++11标准使用 const char *修饰字符串
    int m_Age;//成员变量
public:
    //初始化函数
    void personInit(const char *name,int age){
       // strcpy(m_Name,name);
        m_Name = name;
        if(age > 0 && age <= 100){
            m_Age = age;
        }else{
            cout << "输入的年龄:"<<m_Age<<"不合法"<<endl;
        }
    }
    //设置m_Age年龄
    void setAge(int age){
        if(age > 0 && age <= 100){
            m_Age = age;
        }else{
            cout << "输入的年龄:"<<m_Age<<"不合法"<<endl;
        }
    }
    int getAge(void){
        return m_Age;
    }
    //设置m_Name
    void setName(const char *name){
        //strcpy_s(m_Name,name);
        m_Name = name;
    }
    //得到m_Name
    const char *getName(void){
        return m_Name;
    }

    //显示年龄和姓名
    void showPerson(){
        cout<<"姓名:"<<m_Name<<" 年龄:"<<m_Age;
    }
};

void test03(){
    Person spike;
    spike.personInit("name",18);
    spike.setName("肉丝");
    spike.setAge(16);
    cout<<spike.getName()<<""<<spike.getAge()<<endl;
    spike.showPerson();
}

Result:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序小白Erike.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值