目录
9.1 类和对象的基本概念
9.1.1 类的封装性
9.1.2 定义类的步骤和方法
9.1.3 设计一个学生类 Student
类是一种用户自定义的数据类型,它定义了一组数据成员和成员函数。类可以看作是一个模板或者蓝图,用于创建对象。类将具有共性的数据和方法封装在一起,加以权限区分,用户只能通过公共方法 访问私有数据。
这里我的另外一个理解是这样的:类就像是一个学生类别、每个具体的张三、李四学生就是一个对象,对象就有不同的属性,不同的姓名、身高、体重、性别、年龄这些特征,比如张三会武术、李四会跳舞、王五会吃土等等,你的类就是相当于一个空白的模板,把这些属性汇合到一起以后,同过这个类名称来创建张三、李四对象,每一个对象都可以拥有不一样的身高体重等等,这里只是举个例子,实际上类和对象的作用比上面说的要大很多。并且类中的不同函数、方法的权限不一,更加的多元化,满足不同需求。
对象则是类的实例化结果,它是类的具体实体,具有类定义中定义的数据成员和行为(成员函数)。
我们编写程序的目的是为了解决现实中的问题,而这些问题的构成都是由各种事物组成,我们在计算机中要解决这种问题,首先要做就是要将这个问题的参与者:事和物抽象到计算机程序中,也就是用程序语言表示现实的事物。那么现在问题是如何用程序语言来表示现实事物?现实世界的事物所具有的共性就是每个事物都具有自身的属性,一些自身具有的行为,所以如果我们能把事物的属性和行为表示出来,那么就可以抽象出来这个事物。
类的权限分为: private (私有)、protected (保护) 、public (公有) 3种权限。
在类的外部,只有public修饰的成员才能被访问,在没有涉及继承与派生时,private和protected是同等级的,外部不允许访问。用户在类的外部可以通过public的方法间接访问private和protected数据
定义类的关键字:class
设计一个类步骤: 思考该类有哪些数据成员 操作这些数据的成员函数 数据一般默认都是设计成私有, 成员函数为公有,通过成员函数操作数据,来实现对类和对象的一些操作。
注意,私有、保护成员变量不能直接在类的外部进行访问
完整代码:
#include
using namespace std;
class Data{
//类中默认为私有
private:
int a; //私有成员变量,不用给类中成员初始化
protected:
int b;//受保护的成员变量
public:
int c;//公有的成员变量
//在类的内部,不分权限之分
void printData(void){
cout << a << " " << b << " " << c <
题目:学生信息管理系统
设计一个学生类 Student
,包含以下成员:
数据成员:
成员函数:
void setInfo(const std::string& n, const std::string& i)
:设置学生的姓名和学号。std::string getName()
:返回学生的姓名。std::string getId()
:返回学生的学号。根据上述要求,设计并实现 Student
类,然后编写一个测试程序,在测试程序中创建多个学生对象,并调用相应的成员函数来设置和获取学生的姓名和学号。
完整代码:
#include
#include
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 << "输入的年龄:"< 0 && age <= 100){
m_Age = age;
}else{
cout << "输入的年龄:"<
Result: