用户_29571846
发布于 2026-06-22 / 1 阅读
0
0

C++ 面向对象入门:类与对象、封装基础

一、前言

结构体仅存储数据,类 (class) 同时封装成员变量(属性)+ 成员函数(行为),是 C++ 面向对象编程核心,实现封装特性,隔离数据与外部访问。

二、类的基础定义

语法格式:

cpp

运行

class 类名
{
    访问控制权限:
        成员变量;
        成员函数;
};

示例:学生类,包含姓名、分数属性,打印信息行为

cpp

运行

#include <iostream>
#include <string>
using namespace std;
class Student
{
// 公有访问权限,外部可直接访问
public:
    string name;
    int age;
    double score;
    // 成员函数:打印学生信息
    void showInfo()
    {
        cout << "姓名:" << name << " 年龄:" << age << " 分数:" << score << endl;
    }
};

三、创建类对象、调用成员

cpp

运行

int main()
{
    // 创建对象
    Student s1;
    // 赋值成员变量
    s1.name = "小明";
    s1.age = 18;
    s1.score = 93;
    // 调用成员函数
    s1.showInfo();
    return 0;
}

对象指针使用->访问成员:

cpp

运行

Student s;
Student *p = &s;
p->showInfo();

四、访问控制权限(封装核心)

类中三种权限修饰符,控制外部代码访问权限,实现数据隐藏:

  1. public 公有:任意位置均可访问(外部、成员函数、子类)

  2. private 私有:仅本类内部成员函数可访问,外部无法读写(默认权限)

  3. protected 保护:本类 + 子类可访问,外部不可访问

标准封装规范:成员变量全部 private,提供 public 函数读写数据。

cpp

运行

class Student
{
private:
    // 私有属性,外部禁止直接访问
    double score;
public:
    // 设置分数
    void setScore(double s)
    {
        // 数据校验,过滤非法分数
        if(s >= 0 && s <= 100)
            score = s;
        else
            cout << "分数非法" << endl;
    }
    // 获取分数
    double getScore()
    {
        return score;
    }
};

外部只能通过setScore/getScore操作私有分数,可控数据合法性,这就是封装优势。

五、成员函数类内声明、类外实现

类内只写函数声明,函数具体逻辑写在外部,简化类结构:

cpp

运行

class Student
{
public:
    string name;
    void showInfo(); // 声明
};
// 类外实现,作用域限定符 ::
void Student::showInfo()
{
    cout << "学生姓名:" << name;
}

六、对象数组(批量创建同类对象)

cpp

运行

Student stuArr[2];
stuArr[0].name = "小红";
stuArr[1].name = "小李";
stuArr[0].showInfo();

七、新手易错点

  1. class 默认权限为 private,结构体 struct 默认 public,二者权限有区别

  2. 外部代码直接访问 private 私有成员,编译报错

  3. 类外实现成员函数遗漏类名::作用域限定符

八、综合实战:封装用户账户(私有密码 + 读写接口)

cpp

运行

#include <iostream>
#include <string>
using namespace std;
class User
{
private:
    string username;
    string password; // 私有密码,外部不能直接读取
public:
    void setUser(string name)
    {
        username = name;
    }
    void setPwd(string pwd)
    {
        if(pwd.size() >= 6)
            password = pwd;
        else
            cout << "密码长度不足6位" << endl;
    }
    bool checkLogin(string inputName, string inputPwd)
    {
        return (username == inputName && password == inputPwd);
    }
};
int main()
{
    User u;
    u.setUser("student01");
    u.setPwd("123456");
    string un, pwd;
    cout << "输入账号密码:";
    cin >> un >> pwd;
    if(u.checkLogin(un,pwd))
        cout << "登录成功";
    else
        cout << "账号或密码错误";
    return 0;
}

九、下期预告

下一篇:C++ 构造函数、析构函数、public/private 访问控制详解


评论