首页 > 技术文章 > C++学习日记(二)————初始字符串类型及封装

duijinglianxinduijingxiuxing 2017-09-12 18:40 原文

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

做下总结:

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;

}

 

推荐阅读