一、前言
结构体仅存储数据,类 (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();
四、访问控制权限(封装核心)
类中三种权限修饰符,控制外部代码访问权限,实现数据隐藏:
public公有:任意位置均可访问(外部、成员函数、子类)private私有:仅本类内部成员函数可访问,外部无法读写(默认权限)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();
七、新手易错点
class 默认权限为 private,结构体 struct 默认 public,二者权限有区别
外部代码直接访问 private 私有成员,编译报错
类外实现成员函数遗漏
类名::作用域限定符
八、综合实战:封装用户账户(私有密码 + 读写接口)
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 访问控制详解