iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++深入分析讲解类的知识点
  • 411
分享到

C++深入分析讲解类的知识点

2024-04-02 19:04:59 411人浏览 八月长安
摘要

目录知识点引入类的初识1、封装2、权限3、类的定义(定义类型)4、类的成员函数与类中声明及类外定义Person类的设计设计立方体类点Point和圆Circle的关系知识点引入 C语言

知识点引入

C语言中 数据 和 方法 是独立:

//c语言的思想:数据  方法 分开
//人
typedef struct
{
    char name[32];
    int age;
}Person;
//动物
typedef struct
{
    char name[32];
    int age;
    int type;
}Dog;
void PersonEat(Person *p)
{
    cout<<p->name<<"正在吃饭"<<endl;
}
void DogEat(Dog *d)
{
    cout<<d->name<<"正在吃狗粮, 汪汪"<<endl;
}
void test01()
{
    Person person = {"老王",43};
    Dog dog={"旺财",6};
    PersonEat(&person);
    DogEat(&dog);
    // 出现一个问题(数据 方法独立  容易造成 方法 调用错误数据)
    DogEat((Dog *)&person);
}

类的初识

1、封装

把变量(属性)和函数(操作)合成一个整体,封装在一个类中

对变量和函数进行访问控制(公有、私有、保护)

类的封装:将数据和方法封装在一起 加以权限区分 用户只能通过公共方法 访问私有数据。

2、权限

private私有 public公有 protected保护

private私有:类外部不可直接访问私有数据 类内部可以访问

protected保护:类外部不可直接访问私有数据 类内部可以访问

public公有:类外部可以访问私有数据 类内部可以访问

权限只是针对 类的外部 , 类的内部 没有权限之分

class 类名{//抽象的概念  系统不会为其分配空间
    private://私有 类的外部 不可直接访问
    protected://保护 类的外部 不可直接访问
    数据
    public://公有 类的外部 可以直接访问
    方法
    //在类的内部 没有权限之分  都可以相互访问
};

案例:

class Person//抽象的概念
{//类的内部
private:
    int m_money;//私有数据
protected:
    int m_age;
public:
    void dese()
    {
        m_money = 100;
        m_age = 18;
        cout<<"我有房 有车 又年轻"<<m_age<<"岁又有钱"<<m_money<<"万美金 我就爱嘚瑟"<<endl;
    }
};
void test01()
{
    //用类 去 实例化 一个对象(就是用Person定义一个变量)
    Person lucy;
    //cout<<"兄弟你的钱:"<<lucy.m_money<<endl;//err 内的外部不可访问
    //cout<<"兄弟你的年龄:"<<lucy.m_age<<endl;//err 内的外部不可访问
    lucy.dese();//ok 公有的类的外部可用访问
    //private protected虽然是私有、保护的 类外不可访问 但是用户可以借助 public公有的方法
    //间接的访问私有、保护的数据
}

class默认是私有的 数据私有 方法公有 用户就可以借助 公有方法 间接的操作 私有数据

3、类的定义(定义类型)

关键字 class

#include <iOStream>
using namespace std;
//类的定义:是不占空间  只有用类实例化 对象的时候 系统为对象开辟空间
class Data
{
private://私有
//    int a=10;//err 定义类的时候 尽量不要 给成员赋值
    int a;//成员 数据
protected://保护
    int b;
public://公有
    int c;
    //成员函数
    void data_show(void)
    {
        //类的内部:没有权限区分 
        cout<<a<<", "<<b<<", "<<c<<endl;
    }
};
//类中的数据成员 拥有 独立的空间
void test01()
{
    //使用Data实例化一个对象名为ob的对象
    Data ob;
    //成员数据依赖于对象的
    //cout<<" ob.a = "<<ob.a<<endl;//err a为私有 类外不能直接访问
    //cout<<" ob.b = "<<ob.b<<endl;//err b为保护 类外不能直接访问
    cout<<" ob.c = "<<ob.c<<endl;//err c为公有 类外可以直接访问
    //对象 通过公共方法 间接调用私用数据
    ob.data_show();
}
int main(int arGC, char *argv[])
{
    test01();
    return 0;
}

4、类的成员函数与类中声明及类外定义

class Data2
{
    //默认为私有
    int a;
public:
    //类中声明 类外定义
    void setA(int v);
    int getA(void);
};
void Data2::setA(int v)
{
    a = v;
    return;
}
int Data2::getA()
{
    return a;
}
void test02()
{
    Data2 ob;
    ob.setA(100);
    cout<<"a = "<<ob.getA()<<endl;
}

Person类的设计

设计一个Person类型

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

person.h:

#ifndef PERSON_H
#define PERSON_H
//类的头文件:一般定义成员数据 声明成员函数
class Person
{
private:
    char m_name[32];
    int m_age;
public:
    //初始化m_name m_age
    void init(char *name, int age);
    //设置name
    void setName(char *name);
    //获取name
    char *getName(void);
    //设置age
    void setAge(int age);
    //获取age
    int getAge(void);
    //显示m_name m_age
    void showPerons(void);
};
#endif // PERSON_H

person.cpp:

#include "person.h"
//#include <string.h>
#include<cstring>
#include<iostream>
using namespace std;
//定义类的成员函数
void Person::init(char *name, int age)
{
    strcpy(m_name, name);
    if(age>=0 && age<=100)
    {
        m_age = age;
    }
    else
    {
        cout<<"年龄输入非法"<<endl;
    }
}
void Person::setName(char *name)
{
    strcpy(m_name, name);
    return;
}
char *Person::getName()
{
    return m_name;
}
void Person::setAge(int age)
{
    if(age>=0 && age<=100)
    {
        m_age = age;
    }
    else
    {
        cout<<"年龄输入非法"<<endl;
    }
    return;
}
int Person::getAge()
{
    return m_age;
}
void Person::showPerons()
{
    cout<<"姓名:"<<m_name<<", 年龄:"<<m_age<<endl;
    return;
}

main.cpp

#include <iostream>
#include "person.h"
using namespace std;
int main(int argc, char *argv[])
{
    Person ob;
    ob.init("lucy", 18);
    ob.showPerons();
    ob.setName("bob");
    cout<<"姓名:"<<ob.getName()<<endl;
    ob.setAge(19);
    cout<<"年龄:"<<ob.getAge()<<endl;
    return 0;
}

设计立方体类

设计立方体类(Cube),求出立方体的面积( 2ab + 2ac + 2bc )和体积( a * b * c),分别用全局函数和成员 函数判断两个立方体是否相等

cube.h

#ifndef CUBE_H
#define CUBE_H
class Cube
{
private:
    int m_l;
    int m_w;
    int m_h;
public:
    void setL(int l);
    int getL(void);
    void setW(int w);
    int getW(void);
    void setH(int h);
    int getH(void);
    int getS(void);
    int getV(void);
    bool compareCube(Cube &ob);
};
#endif // CUBE_H

cube.cpp

#include "cube.h"
void Cube::setL(int l)
{
    m_l = l;
    return;
}
int Cube::getL()
{
    return m_l;
}
void Cube::setW(int w)
{
    m_w = w;
    return;
}
int Cube::getW()
{
    return m_w;
}
void Cube::setH(int h)
{
    m_h = h;
    return;
}
int Cube::getH()
{
    return m_h;
}
int Cube::getS()
{
    return (m_l*m_w+m_w*m_h+m_l*m_h)*2;
}
int Cube::getV()
{
    return m_l*m_w*m_h;
}
bool Cube::compareCube(Cube &ob)
{
    if((m_l==ob.m_l) &&( m_w==ob.m_w) &&(m_h == ob.m_h))
        return true;
    else
        return false;
}

main.cpp

#include <iostream>
#include "cube.h"
using namespace std;
bool myCompareCube(Cube &ob1, Cube &ob2)
{
    if((ob1.getL() == ob2.getL()) && \
            (ob1.getW() == ob2.getW()) &&(ob1.getH() == ob2.getH()))
    {
        return true;
    }
    else
        return false;
}
int main(int argc, char *argv[])
{
    Cube ob1;
    ob1.setL(10);
    ob1.setW(10);
    ob1.setH(10);
    cout<<"面积为:"<<ob1.getS()<<endl;
    cout<<"体积为:"<<ob1.getV()<<endl;
    Cube ob2;
    ob2.setL(10);
    ob2.setW(20);
    ob2.setH(10);
    if(ob1.compareCube(ob2) == true)
    {
        cout<<"相等"<<endl;
    }
    else
    {
        cout<<"不相等"<<endl;
    }
    if(myCompareCube(ob1, ob2) == true)
    {
        cout<<"相等"<<endl;
    }
    else
    {
        cout<<"不相等"<<endl;
    }
    return 0;
}

点Point和圆Circle的关系

#include <iostream>
using namespace std;
class Point
{
private:
    int m_x;
    int m_y;
public:
    void setX(int x)
    {
        m_x = x;
    }
    int getX(void)
    {
        return m_x;
    }
    void setY(int y)
    {
        m_y = y;
    }
    int getY(void)
    {
        return m_y;
    }
};
class Circle
{
private:
    Point m_p;
    int m_r;
public:
    void setPoint(int x, int y)
    {
        m_p.setX(x);
        m_p.setY(y);
    }
    void setR(int r)
    {
        m_r = r;
    }
    int getR(void)
    {
        return m_r;
    }
    int PointIsOnCircle(Point &p)
    {
        int tmp_x = (m_p.getX()-p.getX())*(m_p.getX()-p.getX());
        int tmp_y = (m_p.getY()-p.getY())*(m_p.getY()-p.getY());
        if((tmp_x+tmp_y) > (m_r*m_r))//圆外
        {
            return 1;
        }
        else if((tmp_x+tmp_y) == (m_r*m_r))//圆上
        {
            return 0;
        }
        else if((tmp_x+tmp_y) < (m_r*m_r))//圆内
        {
            return -1;
        }
    }
};
int main(int argc, char *argv[])
{
    Point p1;
    p1.setX(5);
    p1.setY(5);
    Circle c1;
    c1.setPoint(2,2);
    c1.setR(5);
    int ret = c1.PointIsOnCircle(p1);
    if( ret== 0)
    {
        cout<<"圆上"<<endl;
    }
    else if(ret == 1)
    {
        cout<<"圆外"<<endl;
    }
    else if(ret == -1)
    {
        cout<<"圆内"<<endl;
    }
    return 0;
}

到此这篇关于c++深入分析讲解类的知识点的文章就介绍到这了,更多相关C++类内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++深入分析讲解类的知识点

本文链接: https://www.lsjlt.com/news/150436.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++深入分析讲解类的知识点
    目录知识点引入类的初识1、封装2、权限3、类的定义(定义类型)4、类的成员函数与类中声明及类外定义Person类的设计设计立方体类点Point和圆Circle的关系知识点引入 C语言...
    99+
    2022-11-13
  • C++深入分析讲解函数与重载知识点
    目录函数的默认(缺省)参数1、默认参数的定义2、默认参数的注意点占位参数1、占位参数 函数内部无法使用2、占位参数 可以设置成缺省参数函数重载函数的默认(缺省)参数 1、默认参数的定...
    99+
    2022-11-13
  • C++深入分析讲解链表
    目录链表的概述1、数组特点2、链表的概述3、链表的特点静态链表链表的操作1、链表插入节点头部之前插入节点尾部之后插入节点有序插入节点2、遍历链表节点3、查询指定节点4、删除指定节点5...
    99+
    2022-11-13
  • C++深入分析讲解智能指针
    目录1.简介2.unique_ptr指针(独占指针)3.shared_ptr指针(共享所有权)4.weak_ptr(辅助作用)5.自实现初级版智能指针6.总结1.简介 程序运行时存在...
    99+
    2022-11-13
  • C++类与对象的重点知识点详细分析
    目录一、类的六个默认成员函数详解1、拷贝构造1.1 拷贝构造的引入及概念1.2 拷贝构造函数的特征2、赋值运算符重载2.1 运算符重载2.2 赋值运算符重载3、普通对象取地址4、co...
    99+
    2023-02-13
    C++类与对象知识点 C++类与对象关系
  • C++类与对象的基础知识点详细分析
    目录一、什么是类和对象呢1、类的引入2、类的定义3、类的访问限定符4、类对象的储存方式5、this指针的特性二、类的六个默认成员函数详解1、构造函数2、析构函数一、什么是类和对象呢 ...
    99+
    2023-02-13
    C++类与对象知识点 C++类与对象关系
  • 超详细的PHP入门知识点讲解
    目录 一、简介 二、php基本语法  二、变量和作用域 三、常量 四、数据类型 五、运算符 六、流程控制 七、超全局变量 一、简介 基础知识: 需要一定的html和css的语法知识 基本概念: PHP(超文本预处理器)是一种通用开源脚本...
    99+
    2023-09-25
    php 开发语言
  • Spring深入分析讲解BeanUtils的实现
    目录背景DOBODTOVO数据实体转换使用方式原理&源码分析属性赋值类型擦除总结背景 DO DO是Data Object的简写,叫做数据实体,既然是数据实体,那么也就是和存储...
    99+
    2022-11-13
  • C++实现栈与分析栈的知识点
    目录一、栈的概念二、栈的基本组成和操作三、栈元素的存储方式四、C++实现静态栈(1)栈类的设计(1)isEmpty()判断是否为空(2)isFull()判断是否已满(3)push()...
    99+
    2022-11-13
  • HTML中入门知识点的示例分析
    这篇文章主要为大家展示了“HTML中入门知识点的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“HTML中入门知识点的示例分析”这篇文章吧。   HTM...
    99+
    2022-10-19
  • 一文深入了解Python中的继承知识点
    目录1 类继承1.1 继承的简单例子2 继承的类型2.1 单继承2.2 多继承2.3 多级继承2.4 分层继承2.5 Python中的混合继承3 总结1 类继承 Python 是面向...
    99+
    2022-11-11
  • AndroidView的事件分发机制深入分析讲解
    目录1.分发对象-MotionEvent2.如何传递事件1.传递流程2.事件分发的源码解析1.Activity对点击事件的分发过程2.顶级View对点击事件的分发过程3.主要方法4....
    99+
    2023-01-29
    Android View事件分发机制 Android事件分发
  • C++深入讲解类与封装的概念与使用
    目录一、类的组合二、类的封装三、类成员的作用域四、小结一、类的组合 电脑一般而言是由 CPU,内存,主板,键盘和硬盘等部件组合而成。 二、类的封装 类通常分为以下两个部分 类的实现...
    99+
    2022-11-13
  • C++虚函数表与类的内存分布深入分析理解
    目录不可定义为虚函数的函数将析构函数定义为虚函数的作用虚函数表原理继承关系中虚函数表结构多重继承的虚函数表多态调用原理对齐和补齐规则为什么要有对齐和补齐资源链接不可定义为虚函数的函数...
    99+
    2022-11-13
    C++ 虚函数表 C++ 类的内存分布
  • C++深入讲解对象的销毁之析构函数
    目录一、对象的销毁二、析构函数三、小结一、对象的销毁 生活中的对象都是被初始化后才上市的生活中的对象被销毁前会做一些清理工作—股而言,需要销毁的对象都应该做清理 解决方案...
    99+
    2022-11-13
  • 如何理解java 知识点的集合分析
    今天就跟大家聊聊有关如何理解java 知识点的集合分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1 、对象的初始化  (1 )非静态对象的初始化  在创建对象时,对象所在类的所有...
    99+
    2023-06-02
  • C++深入讲解引用的特点及与指针的区别
    目录一.引入二.C++中较为麻烦的运算符三.引用的定义四.引用的特点五.对比指针与引用六.引用与指针的区别1.语法层面的区别2.汇编层面的区别七.引用的其他使用常引用数组引用指针引用...
    99+
    2022-11-13
  • 深入解析:CentOS上搭建web服务器涉及的TCP/IP知识
    搭建web服务器涉及到的TCP/IP知识主要包括网络协议、IP地址、端口号等方面的内容。下面对这些知识进行深入解析。1. 网络协议:...
    99+
    2023-10-09
    CentOS
  • C语言深入讲解动态内存分配函数的使用
    目录一、malloc二、free(用于释放动态开辟的空间)三、calloc四、realloc五、常见的动态内存分配错误六、柔性数组局部变量和函数的形参向栈区申请空间 全局变量和sta...
    99+
    2022-11-13
  • Spring的事件机制知识点详解及实例分析
    同步事件和异步事件 同步事件: 在一个线程里,按顺序执行业务,做完一件事再去做下一件事。 异步事件: 在一个线程里,做一个事的同事,可以另起一个新的线程...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作