zoukankan      html  css  js  c++  java
  • c++类的创建与使用

    c++类的创建与使用

    前言:

    之前一直对c++的类的创建与使用不太熟悉,有些概念还是有点模糊,借着这次休息的机会整理一下对应是知识点。如有不正确的地方还希望各位读者批评指正。

    一.C++中public、protect、private的访问权限控制

    继承修饰符,就像是一种筛子,将基类的成员筛到派生类。public、protected、private,就是筛子的眼。
    通过public继承,所有基类成员(除了private),public、protected都到了派生类里面,public筛眼比较大,不会改变访问权限。
    通过protected继承,所有基类成员(除了private),public、protected都到了派生类里面,protected筛眼大小适中,所有过来的成员都变成了protected。
    通过private继承,所有基类成员(除了private),public、protected都到了派生类里面,private筛眼最小,所有过来的成员都变成了private。

     二.实例

    类是一个模板,可用类生成一系列可用的实例。例如 int B就是生成了一个符合int的数据B,类也是一样,使用类名就可以直接生成一个实例,

    该实例中包含类中所有的数据类型和对这些数据的操作方法。

    首先,创建一个类

     class OBJ
    {
    private:
        char Name[MAX];
        int Num;
        float Price;
        float Total_price;
    protected:
    public:
    }

    该类中包含三个部分,私有部分(private)、保护部分(protected)、公有部分(public)(当然也可以都没有成为一个空类),其中private和protected部分中的数据和内容不可以在类外通过对象(实例)直接调用。

    #include<iostream>
    using namespace std;
    #define MAX 10
    
    class OBJ //创建类
    {
    private:
        char Name[MAX];
        int Num;
        float Price;
        float Total_price;
    protected:
    public:
    };
    void main()
    {
        OBJ ob;//使用类实例化ob
        ob.Num = 10;
    }

    如上使用ob的private成员编译无法通过,报错test.cpp(17): error C2248: “OBJ::Num”: 无法访问 private 成员(在“OBJ”类中声明)。一般使用public方法来操作private数据,以保证数据的安全性,这同样体现了C++的封装性。

    #include<iostream>
    using namespace std;
    
    #define MAX 10
    class OBJ
    {
    private:
        char Name[MAX];
        int Num;
        float Price;
        float Total_price;
    protected:
    public:
        void Get_obj(char name[], int num, float price)
        {
            strcpy(Name, name);
            Num = num;
            Price = price;
            Total_price = Price*Num;
        }
        char *Get_name()
        {
            return Name;
        }
        int Get_num()
        {
            return Num;
        }
        float Get_price()
        {
            return Price;
        }
        float Get_total_price()
        {
            return Price * Num;
        }
        
    };

    一个类结束后记得加上分号,血泪教训,怎么都找不到错误原因)成员函数可以在类内部实现(如上所示),也可以在类外部实现,若在外部实现其内部只需将函数声明后加上分号.

    其外部实现使用如下格式

    返回值类型 类名 ::函数名(参数)

    class OBJ
    {
    private:
        char Name[MAX];
        int Num;
        float Price;
        float Total_price;
    protected:
    public:
        void Get_obj(char name[], int num, float price);
        
        
    };
    
    void OBJ::Get_obj(char name[], int num, float price)
        {
            strcpy(Name, name);
            Num = num;
            Price = price;
            Total_price = Price*Num;
     }

    ::叫做作用域解析符,当类的方法在类外部实现时,用来限定该方法是哪一个类的, 当一个类中有数据和方法但是没说明其属于哪部分(protected、private、protected),则默认其为私有部分.

    #include<iostream>
    using namespace std;
    
    #define MAX 10
    class OBJ
    {
    private:
        char Name[MAX];
        int Num;
        float Price;
        float Total_price;
    protected:
    public:
        void Get_obj(char name[], int num, float price)
        {
            strcpy(Name, name); // strcpy
            Num = num;
            Price = price;
            Total_price = Price*Num;
        }
        char *Get_name()
        {
            return Name;
        }
        int Get_num()
        {
            return Num;
        }
        float Get_price()
        {
            return Price;
        }
        float Get_total_price()
        {
            return Price * Num;
        }
        
    };
    
    void main()
    {
        OBJ ob;
        ob.Get_obj("LLL",10,10);
        cout<<ob.Get_name()<<endl;
        cout<<ob.Get_num()<<endl;
        cout<<ob.Get_price()<<endl;
        cout<<ob.Get_total_price()<<endl;
    }

    参考链接:https://blog.csdn.net/sw3300255/article/details/84813233

  • 相关阅读:
    浏览器中包含什么?三个常驻线程?
    TCP粘包和拆包
    TCP有限状态机
    TCP的拥塞控制
    TCP滑动窗口实现流量控制
    http状态码及意义
    OSI七层结构
    浏览器的event loop
    history api
    表单提交的方式
  • 原文地址:https://www.cnblogs.com/shierlou-123/p/12344085.html
Copyright © 2011-2022 走看看