• C++学习日记(二)————初始字符串类型及封装


    使用频率高,但操作复杂的数据有哪些?

    做下总结:

    int; double;float;char;bool这些类型用的比较频繁,但并不复杂。但对于字符串来说(char数组)用的频繁但操作又复杂,只能用一系列函数来引用,如何克服呢?

    字符串类型:string 就此登场!

    举个例子

    设置好头文件后,直接定义一个名字,爱好,并且可以直接输出,很方便!

    下面是初始化string的使用方法

    string的便捷不只体现在初始化的方面,还体现在后面一整套的人性化的服务。如下:

    代码举例:

    #include <iostream>
    #include <stdlib.h>
    #include <string>
    using namespace std;
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    int main(void) 
    {
        string name;
        cout<<"Please input your name";
        getline(cin,name);
        if(name.empty())
        {
            cout<<"input is null.."<<endl;
            system("pause");
        return 0;
        }
        if(name=="imooc")
        {
            cout<<"you are a adminstractor"<<endl;
        }
        cout<<"hello"+ name<<endl;
        cout<<"your name length :" << name.size() <<endl;//字符串和非字符串连接时不可以用“+”号,要用“<<”号 
        cout<<"your name first letter is:"<<name[0]<<endl;
        system("pause");
        return 0;
    }

    如果输入任意一个名字,比如:

    如果输入管理员名称(imooc):

    数据的封装

    面向对象的基本思想:

    以对象为中心,具体来说就是要以,“谁做什么”来表达程序的逻辑,体现到代码的层面,就是将所有的程序,数据,操作转化为成员函数的调用,换句话说,对象在程序中的所有行为,都是通过调用自己的函数,来完成。

    那如何通过函数来封装数据成员呢?如下例

     

    以年龄这个数据为例,我们定义了两个成员函数,setAge”用来设置年龄的值。另一个是“getAge”用来读取年龄的值。

    这样操作虽然操作上麻烦些,但提高了代码的安全性和整体性,值得拥有!

    数据封装的优点:

     

    比如此例中,给“stu.age”赋值1000的话,显然是有问题的,但如果通过数据的封装,就可以把这个问题给解决掉了。

    “setAge”标定函数意义,规定一个取值的范围,就把上面的问题给解决了!

     

    对于有些数据成员,我们只希望这些成员被外界读取,而不希望被外界改写,怎么写呢?如下例:

     

    我们只希望通过这样一个成员,获取“轮子的个数”而不希望设置,那就这样写。

    下面是一个封装的代码例子

    #include<iostream>
    #include<string>
    using namespace std;
    
    /*数据的封装
    定义一个Student类,含有如下要求:
    1.姓名:name
    2.性别:gender
    3.学分(只读):score
    4.学习:study
    */
    class Student
    {
    public:
        void setName(string _name)
        {
            m_strName = _name;
        }
        string getName()
        {
            return m_strName;
             }
        void setGender(string _gender)
        {
            m_strGender = _gender;
        }
        string getGender()
        {
            return m_strGender;
        }
        int getScore()
        {
            return m_iScore;
        }
        void initScore()
        {
            m_iScore = 0;
        }
        void study(int _score)
        {
            m_iScore+=_score;//m_iScore=m_iScore+_score;
        }
    
    private:
        string m_strName;
        string m_strGender;
        int m_iScore;
    
    };
    int main(void)
    {
        Student stu;
        stu.initScore();
        stu.setName("zhangsan");
        stu.setGender("");
        stu.study(5);
        stu.study(3);
    
        cout<<stu.getName()<<" "<<stu.getGender()<< " "<<stu.getScore()<<endl;
        system("pause"); 
        return 0;
    
    }
    相信坚持的力量!
  • 相关阅读:
    WCF JSON DATETIME JSON.NET (Newtonsoft.Json.dll)
    fastboot 重启到recovery
    EXCEL datatable 根据列名自动写入到相应属性、字段或列中
    支付宝通讯时异常 基础连接已经关闭
    c#.net 调用BouncyCastle生成PEM格式的私钥和公钥
    WCF 遇到 由于线程退出或应用程序请求,已放弃 I/O 操作 ListenerContextInputStream
    runliuv, 安卓查看WIFI密码
    安卓 NEXUS6 修改分辨率,density
    ubuntu 安装 VISUAL STUDIO CODE
    C# .NET MVC 接收 JSON ,POST,WCF 无缝隙切换
  • 原文地址:https://www.cnblogs.com/duijinglianxinduijingxiuxing/p/7511638.html
Copyright © 2020-2023  润新知