初始封装

----------------siwuxie095

数据的封装


学生
为例定义一个类:

有两个数据成员:一个
string 型的姓名,一个 int 型的年龄

通过对象直接访问数据成员的用法是有问题的,违背了面向对象的指导思想

面向对象的基本思想

面向对象的基本思想就是以对象为中心,具体来说就是要以
谁做什么
来表达程序的逻辑

体现到代码层面就是将所有的
数据操作
转化为
成员函数的调用

换句话说,对象在程序中的所有行为,都通过调用自己的函数来完成

如:通过函数来封装数据成员

数据成员定义在
private 下边,这里以 age 为例在 public 中定义两个成员函数

直接用数据成员赋值的方法,虽然方便,但弊端很多,如:出现非法赋值

而数据封装虽然看上去比较麻烦,但好处非常多,如:通过 数据封装 便能

很好的解决像上面的非法赋值问题

只需将 setAge() 略作改变,就能对传入进来的参数起到条件限制的作用

此外,对于有些数据成员来说,只希望这些数据被外界读取,而不希望被外界改变


只能读不能写

以 汽车 为例定义一个类:

private 下边的数据成员代表汽车轮子的个数

对于汽车轮子的个数,不希望外界通过某一个函数去改变它的值,而只能读取它的值

「只能读取不能写入的属性

只读属性」

程序 1:


#include <stdlib.h>

#include<iostream>

#include <string>

using namespace std;

/**********************************************************/

/* 数据的封装

定义一个Student类,含有如下信息:

1.姓名:name

2.性别:gender

3.学分(只读):score

4.学习:study (学习可以增加学分)*/

/**********************************************************/

class Student

{

//一般将 public 写在前边,private 写在后边

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;

}

private:

//数据成员的命名要求:m+下划线+数据类型+名字

//命名的好处:每次看到它就知道它是定义在类中的数据成员

string m_strName;

string m_strGender;

int m_iScore;

};

int main(void)

{

Student stu;

stu.initScore();//如果不初始化
则会失控(值不确定)

stu.setName("Marry");

stu.setGender("女");

stu.study(5);//先修了5个学分

stu.study(3);//再修了3个学分

cout << stu.getName() << " " << stu.getGender() << " " << stu.getScore() << endl;

system("pause");

return
0;

}

程序 2:


#include<stdlib.h>

#include <iostream>

#include <string>

using namespace std;

/**

* 定义类:Student

* 数据成员:m_strName

* 数据成员的封装函数:setName()、getName()

*/

class Student

{

public:

// 定义数据成员封装函数setName()

void setName(string name)

{

m_strName = name;

}

// 定义数据成员封装函数getName()

string getName()

{

return m_strName;

}

private:

//定义Student类私有数据成员m_strName

string m_strName;

};

int main()

{

// 使用new关键字,实例化对象(在堆中实例化对象)

//也可以 Student *stu = new Student; 去掉括号

Student *stu = new Student();

if (NULL==stu)

{

system("pause");

return
0;

}

// 设置对象的数据成员

stu->setName("siwuxie095");

// 使用cout打印对象str的数据成员

cout << stu->getName() << endl;

// 将对象str的内存释放,并将其置空

delete stu;

stu = NULL;

system("pause");

return
0;

}

【made by siwuxie095】

时间: 2024-11-02 08:19:25

初始封装的相关文章

.Net利用泛型封装EF CodeFirst 数据库初始值设定项

在使用 EF的code fist 方法我们可能会用到这三个类型对象DropCreateDatabaseAlways(总是删除创建对象) DropCreateDatabaseIfModelChanges(如果对象盖面删除创建对象) CreateDatabaseIfNotExists(如果对象不存在删除创建对象) 今天就利用泛型和工厂模式,将这三个对象封装以下,首先对三个对象类型分别创建子类,便于后期扩展. public class MyDropCreateDatabaseAlways<T> :

Android Studio开发基础之对点击事件和初始化控件进行封装

public class MainActivity extends Activity implements View.OnClickListener { private TextView Txt; private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity

自动化测试框架 selenium api的封装

接上一篇 http://tianxietaotao.blog.51cto.com/12002420/1951701 这篇我大概介绍下我这个工具的简单介绍 先上图: 制作背景: Web自动化测试在现在测试领域已经越来越普遍,但是写代码对于好多测试猿代码基础较弱,搭建系统也比较麻烦.所以我抽闲暇时间做了这个简单的工具:下面简单介绍下功能 工具简单介绍: 1.工具栏:Resume:调试阶段执行到下一个断点 next:单步执行 debug/run 模式切换 执行.停止 2.用例树:用例采用execl或者

2、C#面向对象:封装、继承、多态、String、集合、文件(上)

面向对象封装 一.面向对象概念 面向过程:面向的是完成一件事情的过程,强调的是完成这件事情的动作. 面向对象:找个对象帮你完成这件事情. 二.面向对象封装 把方法进行封装,隐藏实现细节,外部直接调用. 打包,便于管理,为了解决大型项目的维护与管理. 三.什么是类? 将相同的属性和相同方法的对象进行封装,抽象出 “类”,用来确定对象具有的属性和方法. 类.对象关系:人是类,张三是人类的对象. 类是抽象的,对象是具体的.对象可以叫做类的实例,类是不站内存的,对象才占内存. 字段是类的状态,方法是类执

面向对象中的继承、封装、构造与析构函数

构造函数:是一种特殊的方法.主要用来在创建对象时初始化对象,即为对象成员变量赋值初始值,总与new运算符一起使用在创建对象的           语句中.两根下划线开头,construct     作用:为对象成员变量赋值初始值 类的构造方法,是一个魔术方法     * 自动的被调用(可以被内部进行使用并调用)     * 不用申明,相当于默认一个没有任何执行语句的构造函数     * 会自动返回一个当前类的对象     * 一个类中有且只有一个构造函数     * 构造函数可以带参数,通常是给

面向对象(一)封装 命名空间 访问修饰符等

一.封装 封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成"类",其中数据和函数都是类的成员. 封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部借口,以特定的访问权限来使用类的成员. public class 类名 { //成员变量 private 数据类型 _属性名; //属性 public 数据类型 属

继承、封装和多态的一个简单应用(答答租车系统)

Car.java package com.imooc; //使用面向对象的封装特性public class Car {    // 描述汽车可能有特征    private String name; // 车的名称    private double cargoCapacity;// 车的载货量    private int busLoad;// 车的载客量    private int dailyRent;// 车的日租金 public String getName() {        re

面向对象_封装

万物皆对象,对象因关注产生 类是模子,确定对象将会拥有的特征(属性)和行为(方法) 特点 1类是对象的类型 2具有相同属性和方法的一组对象的集合 属性:对象拥有的特征:值数据 方法:对象拥有的操作:功能 类是个抽象的概念 类是对象的抽取,对象是类的实例. 定义类 定义一个类的步骤 1.定义类名    public class 类名{ 2.编写类的属性 定义属性部分(成员变量) 属性1的类型 属性1: 属性你的类型 属性n: 定义方法部分 方法1: 方法m:     } 如何使用对象 使用对象的步

022医疗项目-模块二:药品目录的导入导出-对XSSF导出excel类进行封装

资源全部来源于传智播客. 好的架构师写的程序,就算给刚入门的新手看,新手一看就知道怎么去用.所以我们要对XSSF导出excel类进行封装.这是架构师的工作,但我们也要知道. 我们写一个封装类: 这个类单独有自己的main函数. 我们进入main函数一步一步看: public static void main(String[] args) throws Exception { /** 导出文件存放物理路径 * @param fileWebPath * 导出文件web下载路径 * @param fi