c++的类和对象

类和对象

什么是类

把抽象结果(利用面向对象的思维模式,思考、观察出的结果),使用用C++的语法封装出一种类似结构的自定义数据类型(复合数据类型)。

如何设计类
复制代码
struct 结构名
{
    成员函数;   // 结构的成员默认访问权限是public
    成员变量;
};
​
class 类名
{
    成员变量;   // 结构的成员默认访问权限是private
    成员函数;
};
​
注意:在C++中类的结构除了成员的默认访问权限不同,没有任何区别(大师兄说的)。
访问限制符

使用以下关键字修改结构、类的成员,管理它们的访问权限:

复制代码
private: 私有的,被它修饰的成员,只能在类的成员函数内使用。
protected: 保护的,被它修饰的成员,只能在类、子类的成员函数内使用。
public: 公开的,被修饰的成员,可以在任何位置使用。
复制代码
#include <iostream>
using namespace std;
​
struct Student
{
    void in(void)
    {   
        cout << "请输入学生的学号、姓名、年龄、成绩:"; 
        cin >> id >> name >> age >> score;
    }   
    void out(void)
    {   
        // 学号:10010 姓名:hehe 年龄:18 成绩:100
        cout << "学号:" << id << " 姓名:" << name << " 年龄:" << age << " 成绩:" << score << endl;
    }   
private:
    int id; 
    char name[20];
    short age;
    float score; 
};
​
class Student
{
    int id; 
    char name[20];
    short age;
    float score;   
public:
    void in(void)
    {   
        cout << "请输入学生的学号、姓名、年龄、成绩:"; 
        cin >> id >> name >> age >> score;
    }   
    void out(void)
    {   
        // 学号:10010 姓名:hehe 年龄:18 成绩:100
        cout << "学号:" << id << " 姓名:" << name << " 年龄:" << age << " 成绩:" << score << endl;
    } 
};
​
int main(int argc,const char* argv[])
{
    Student stu;
    stu.in();
    stu.out();
    return 0;
}
什么是类对象

使用设计好的类(结构)这种数据类型,定义出的类变量在面向对象编程语言中被称为对象(结构变量),创建类对象的行为也被称为实例化对象。

复制代码
#include <iostream>
using namespace std;
​
class Student
{
    int id; 
    char name[20];
    short age;
    float score;
public:
    void in(void)
    {   
        cout << "请输入学生的学号、姓名、年龄、成绩:"; 
        cin >> id >> name >> age >> score;
    }   
    void out(void)
    {   
        // 学号:10010 姓名:hehe 年龄:18 成绩:100
        cout << "学号:" << id << " 姓名:" << name << " 年龄:" << age << " 成绩:" << score << endl;
    }   
};
​
Student stu; // 在bss内存段上实例化对象
int main(int argc,const char* argv[])
{
    Student stu; // 在stack内存段实例化对象
    Student* stup = new Student; // 在heap内存段实例化对象
}
类的声明与实现分开

如果类的内容不多,一般会选择只定义一个头文件,以类名作为文件名。

复制代码
#ifndef STUDENT_H
#define STUDENT_H
​
class 类名
{
    // 定义成员变量
public:
    // 定义成员函数
};
​
#endif//STUDENT_H

如果类的内容比较多,会选择把类的声明与定义分开,头文件负责类的声明,源文件负责类的实现。

复制代码
#ifndef STUDENT_H
#define STUDENT_H
​
class 类名
{
    // 定义成员变量
public:
    // 声明成员函数
    void 函数名(参数列表);
};
​
#endif//STUDENT_H
复制代码
#include "student.h"
​
void 类名::函数名(参数列表)
{
    
}
相关推荐
软工菜鸡23 分钟前
预训练语言模型BERT——PaddleNLP中的预训练模型
大数据·人工智能·深度学习·算法·语言模型·自然语言处理·bert
南宫生26 分钟前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
发霉的闲鱼27 分钟前
MFC 重写了listControl类(类名为A),并把双击事件的处理函数定义在A中,主窗口如何接收表格是否被双击
c++·mfc
小c君tt30 分钟前
MFC中Excel的导入以及使用步骤
c++·excel·mfc
xiaoxiao涛37 分钟前
协程6 --- HOOK
c++·协程
AI视觉网奇1 小时前
sklearn 安装使用笔记
人工智能·算法·sklearn
JingHongB1 小时前
代码随想录算法训练营Day55 | 图论理论基础、深度优先搜索理论基础、卡玛网 98.所有可达路径、797. 所有可能的路径、广度优先搜索理论基础
算法·深度优先·图论
weixin_432702261 小时前
代码随想录算法训练营第五十五天|图论理论基础
数据结构·python·算法·深度优先·图论
小冉在学习1 小时前
day52 图论章节刷题Part04(110.字符串接龙、105.有向图的完全可达性、106.岛屿的周长 )
算法·深度优先·图论
Repeat7151 小时前
图论基础--孤岛系列
算法·深度优先·广度优先·图论基础