12-11面向对象--封装、构造函数

三、类的属性--封装字段

包含两个方法:

1、读访问器:get(取值)

2、写访问器:set(赋值)

///==封装==
private string _Nihao;//原有的普通变量private私有的,通过右键--重构--封装字段实现;
  /*{
get{return _Name;}//默认一直存在get和set两个方法,但是一直隐藏信息的特性;
set{_Name = value;}
  }*/
//封装字段
  public string Name//封装之后的属性,public公共的,
  //相当于_Name的传话的中间人,封装之后将原有隐藏的变量属性显示出来,两种方法:get,set。
{
get //读访问器,获取,返回_Name的值,取值的过程
{
return _Nihao;//return的是自身的值
}
set //写访问器,设置name的值赋值给_Name,赋值的过程
{
int sum = 0;
for (int i = 1; i <= 10; i++)
{
sum = sum + i;
}
value = sum.ToString();
_Nihao = value;

}

在主函数中调用:

///==封装==
fengzhuang p = new fengzhuang();//必须要初始化new才能调用
Console.WriteLine("输入:");
p.Name = Console.ReadLine();
Console.WriteLine(p.Name);
Console.ReadLine();

这样就可以返回值了。

四、构造函数

定义:当使用new关键字创建一个对象时,一个特殊的函数被自动调用,这就是类的构造函数。

在C#中,类的构造函数与类名相同,没有返回值。

class  student

{

public student()//构造函数的名称同类名,当在主函数调用时,只要初始化new,构造函数就可以被自动调用。

{

方法;

}

}

【习题】

///学生课程,循环输入学生信息,输出平均分,最高分,最低分,排序;(利用面向对象)
Console.Write("请输入学生人数:");
int n = int.Parse(Console.ReadLine());
Console.WriteLine("请输入学生学号,姓名,分数");
ArrayList arr = new ArrayList(); //定义一个集合,
for (int i = 0; i < n; i++)
{
student s = new student();//for循环中每循环一次,必须重新初始化,不然会把之前的赋值替换掉,滞留最后一次赋值
Console.Write("学号:");
s.Code = int.Parse(Console.ReadLine());
Console.Write("姓名:");
s.Name = Console.ReadLine();
Console.Write("分数:");
s.Score = decimal.Parse(Console.ReadLine());
arr.Add(s);//把类的属性全都放在集合中
}
//for循环求总分;
decimal sum = 0;
for (int i = 0; i < n; i++)
{
student avgs = (student)arr[i];//这一步是将集合arr强制转换为student类。
sum += avgs.Score;//求总分
}

//for嵌套循环冒泡排序,求最高分,最低分
for (int i = 0; i < n; i++)
{
for (int j = i; j < n; j++)
{
student s1 = (student)arr[i];//把集合按索引强制转化为student类,并把集合中的数值赋值给s1;
student s2 = (student)arr[j];
if (s1.Score < s2.Score)//根据分数判断大小,按照先大后小的顺序排列
{
student zhong = new student();  //冒泡排序(重点)
zhong = s1;
arr[i] = s2;//表示把较大值,赋值给i索引
arr[j] = zhong;
}
}
}

//打印输出
Console.WriteLine("总分:{0}", sum);
Console.WriteLine("平均分:{0}", sum / n);
student ss1 = (student)arr[0];
Console.WriteLine("姓名:{0}最高分:{1}",ss1.Name,ss1.Score);
int m=n-1;
student ss2 = (student)arr[m];
Console.WriteLine("姓名:{0}最低分:{1}", ss2.Name, ss2.Score);
//按成绩排序,for循环
Console.WriteLine("本班的成绩列表如下:*****************************");
for (int i = 0; i < n; i++)
{
student avgs = (student)arr[i];
Console.WriteLine("名次 学号 姓名 分数");
Console.WriteLine("{0} {1} {2} {3} ",i+1,avgs.Code,avgs.Name,avgs.Score);
}
Console.ReadLine();

时间: 2024-10-12 04:53:04

12-11面向对象--封装、构造函数的相关文章

[.net 面向对象编程基础] (11) 面向对象三大特性——封装

[.net 面向对象编程基础] (11) 面向对象三大特性——封装 我们的课题是面向对象编程,前面主要介绍了面向对象的基础知识,而从这里开始才是面向对象的核心部分,即 面向对象的三大特性:封装.继承.多态. 1.封装概念 封装:每个对象都包含有它能进行操作的所有信息,这个特性称为封装.这样的方法包含在类中,通过类的实例来实现. 2.封装的优点 A.良好的封装能够减少耦合(比如实现界面和逻辑分离) B.可以让类对外接口不变,内部可以实现自由的修改 C.类具有清晰的对外接口,使用者只需调用,无需关心

Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js

1.1. 封装性是面象对象编程中的三大特性之一  三个基本的特性:封装.继承与多态1 1.2. 魔术方法 预定义方法2 1.3. 魔术常量(Magic constants) 预定义变量2 1.4. 适用领域 js php java c#2 1.5. 构造函数 __construct( ) vs xxxCls()3 1.6. 析构函数名称必须是__destruct( )  finally()3 1.7. 私有属性 与工友属性3 1.8. $this指针3 1.9. __autoload() 类自动

php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一系列个体的集合,类是一个抽象的概念2.什么是对象?从类中拿到的具有具体属性值得个体,称为对象,对象是一个具体的个体 所以,面向对象即我们专注对象来处理问题,通过从一个个具有属性和功能的类中拿到对象来处理问题. 下面我们再来细说下面向对象的三大特征:继承/封装/多态 一.继承 在PHP中我们主要通关E

面向对象 封装 、继承

构造函数: 构造函数 - 创建一个类的函数 每一个类都有构造函数,访问修饰符必须是public的,并且不需要写任何返回值,方法名与类名一致 自己写的类 - 用户自定义类型如果要使用自定义类型产生出来的  对象  必须有一个实例化的过程 实例化格式:类型名  ss = new 构造函数(); 访问修饰符 -  4个 public - 公共的,任何地方都可以访问,但是需要引用 命名空间 private - 私有的,类的内部才可以访问 internal - 内部的,默认的,程序集中可以访问,程序集就是

Java面向对象㈠ -- 封装

Java的面向对象有三大特征:封装.继承.多态.这里主要对封装进行讲解. 封装可以理解为隐藏一个类的成员变量和成员函数,只对外提供需要提供的成员函数. Java的封装主要通过访问权限控制符:private,默认,protected,public来实现.(这四个权限访问控制符的区别网上有很多,建议读者自行搜索学习,切记要亲自练习一下!)最明显的实现就是把类的成员变量私有(private),只能通过类的成员函数来进行访问,并且此时的成员函数公有(public).这就是著名的setter/getter

[ionic开源项目教程] - 第11讲 封装BaseController实现controller继承

关注微信订阅号:TongeBlog,可查看[ionic开源项目]全套教程. 截止到第10讲,tab1[健康]模块的功能基本已经完成了,但这一讲中,controller层又做了较大的改动,因为下一讲中tab2[医疗]模块的实现跟tab1类似,考虑到不让代码冗余,这里使用BaseCtrl将公共代码提取出来作为controller的基类,供其它模块使用,提取后的[健康]模块也对应有所改动. 目录 [ionic开源项目教程] 第1讲 前言,技术储备,环境搭建,常用命令 [ionic开源项目教程] 第2讲

第12天 面向对象

第12天面向对象 今日内容介绍 构造方法 this super 构造方法 我们对封装已经有了基本的了解,接下来我们来看一个新的问题,依然以Person为例,由于Person中的属性都被private了,外界无法直接访问属性,必须对外提供相应的set和get方法.当创建人对象的时候,人对象一创建就要明确其姓名和年龄,那该怎么做呢? 构造方法介绍 在开发中经常需要在创建对象的同时明确对象的属性值,比如员工入职公司就要明确他的姓名.年龄等属性信息. 那么,创建对象就要明确属性值,那怎么解决呢?也就是在

python面向对象封装

# 面向对象封装案例:为新房子增添家具# 分析对象的属性# 房子属性:户型.面积 # 家具属性: 家具名称.占地面积 class Furniture: def __init__(self, name, area): self.name = name self.area = area def __str__(self): return F"[{self.name}]占地面积{self.area}平方米" class House: def __init__(self, house_type

python学习 面向对象封装

from collectoins import namedtuplePoint=namedtuple('point',['x','y'])t1=Point(1,2)print(t1.x)print(t1.y)没有方法的类属性不会发生变化    定义简单 不能改变面向对象封装私有属性!!!私有方法!!!用装饰器描述的几个方法@property !!!@classmethod!!@staticmethod! 封装:class Teacher:     def __init__(self,name,p

OC面向对象封装

OC面向对象封装 一.面向对象和封装 面向对象的三大特性:封装(成员变量),继承,多态 在OC语言中,使用@interface和@implementation来处理类. @interface就好像暴露在外面的时钟表面,像外界提供展示以及接口,@implementation就好像隐藏在时钟内部的构造实现,把具体的实现封装了起来. 二.Set方法 在研发过程中,考虑到安全性要求,我们一般不在成员变量名前面使用@public,@protected等关键字修饰,而是使用Set方法来为对象提供成员变量值,