c++类与对象

  .类与对象的概念

1.面向对象是指一种程序设计范型,同时也是一种程序开发的方法。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
面向对象: 利用对象间的消息传递来驱动程序的执行。

优点: 真实表现客观世界,对象间的关系清晰,对象间的消息处理高效。

面向过程: 强调处理问题的过程。
不足之处: 复用性较差,无法真实描绘客观世界。

2、类和对象的定义:
对象是对问题域中客观存在的事物的抽象,它是一组属性和这些属性上的操作的封装体。
类是具有相同属性和操作的一组对象的统一抽象的描述。
类是对象的模板,
对象是类的实体。

对象=数据+数据上的操作
程序= (对象1+对象2+对象3+...) + 消息
消息:
面向对象中,我们称一个对象对另一个对象施加的操作为消息(message)。
: 对汽车对象,点火、换档、踩油门、踩刹车等,这些施加
操作的过程,称为发送消息。

对象具有抽象性、封装性、继承性、多态性四个特点。

(1) 对象的抽象性
抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。程序设计中对象的抽象有两方面,一是对数据的抽象,即是对象本身属性的抽象
。二是过程的抽象,即是对象本身行为的抽象。
(2) 对象的封装性

封装有两个含义:
一是把对象的全部属性和操作结合在一起,形成一个不可分割的整体对象

二是信息隐藏,即这个整体对外尽量隐藏它的细节,只公布一个有限界面,
通过这个界面和其它对象交互。
(3) 对象的继承性
特殊类的对象获得一般类的全部属性与称做特殊类对一般类的继承
被继承的类叫父类或基类,继承父类的类叫子类或派生类。

例:圆形(circle)的数据抽象:
int x, y;                                                                                    class circle
double  r;                        抽象                                                  {

行为抽象:————————————————>                  public:
                                                                                                     void  setx(int  m) {x=m;}

setx();  sety();  setr();  draw();                                                        void  sety(int  n) {y=n;}
                                                                                                     void  set(int  k)  {y=k;}
                                                                                                     void  draw() {.....}
                                                                                               private:
                                                                                                    int  x,y;
                                                                                                    double  r;

                                                                                                  };

二、类和对象的定义
1、类定义形式:
class 类名
public:     //公有段数据成员和成员函数;

 

protected:     //保护段数据成员和成员函数;

private:      //私有段数据成员和成员函数;
};

访问控制修饰符                     访问控制作用

public ————————————  在程序的任何地方

都可以访问public成员

private ————————————只能类内部和友元中访问

protected ——————————只能在本类、派生类和友元中访问

  定义一个类
class sample

{
private int x;
public:
void fun()
  {.......;

}
};

   定义一个类(类外实现成员函数)
class sample

{
private int x;
public:
void fun();
};

void sample::.fun()

{
.......;

}          //类外成员函数的实现

类外函数实现的格式为:
函数类型    类名::函数名(参数表)
             {语句组;}
其中,运算符“:”称为作用域分辨符,它指函数名”是属于“类名”的成员函数。

2、定义对象:
方法1:
class A

{
public:
int r,t;

};

方法2 :
class B

{
int I,j;
public:
void Setdata(int a,int b)
{l=a; j=b;};
void print(void)
{cout<<lk<<'\t'<<j<<'\n';}
};

3、类中的构造函数:
(1)构造函数是类的成员函数,在类内声明,可以在类体内或类体外实现。
(2)构造函数名与类名相同。
(3)构造函数无返回值。
(4)构造函数在创建对象时,自动调用,不需要程序员写代码显式调用。

:
#include<iostream>
class test

{
public:
test()

{cout <<"c called \n";}
};
test obj1;
int main()
{test obj1;}
输出结果为:
c called

构造函数的重载:
:
#include<iostream>
class test

{
public:
test(){cout<<"
c called \n";}
test(char *name){cout<<"c called  name="<<name;}
};
test obj1;
int main()

{
test obj1;
text obj2 ("小明");

}
输出结果为: c called
            c called name=小明


4、类中的析构函数
(1)析构函数名为~<类名>”。如,Calendar类的析构函数名为  ~Calendar.
(2)没有参数和返回值。
(3)析构函数不能重载。
(4)当对象消亡时,系统回收该对象所占用的内存空间前,析构函数会被自动调用。


5、类使用的几点说明:
  (1) 在类的外部,只能访问类的公有成员,而不能访问类的私有成员或保护成员。若要访问类对象的私有成员,只能通过对象的公有成员函数来获取。
  (2) 同类型的对象之间可以整体赋值,例如:rr=r,将对象r的所有成员依次赋给对象rr的成员,这种赋值与对象的成员访问权限无关。
  (3) 对象用作函数的参数时,属于赋值调用; 函数也可以返回一个对象。

需要现实引用this指针的三种情况
(1) 在类的非静态成员函数中返回类对象本身或对象的引用的时候,
       直接使用return *this, 返回本对象的地址时,用return this。
(2)当参数与成员变量名相同时,如  this - > x=x, 不能写成x=x.

(3)避免对同一对象进行赋值操作,判断两个对象是否相同时,使用this指针。
      1.例:
函数返回对象的引用
#include <iostream>
#include <string>
using namespace std;
class Person
{
public:
Person(string n, int a)
{
name=n; ————————————————//这里的name等价于this->name
age=a;  ————————————————  //这里的age等价于this->age
int get_age(void)const   { return age;}
Person& add_age (int i)   {age + i; retum *this;}
private
string name;
int age;
};
int main()
{
Person Li( "Li", 20);
cout <<" Li age ="< Li.get_age()<<endl;
cout<<" Li add age "=<< Li. add_age(1).get_ageo<<endl;
           //增加1岁的同时,可以对新的年龄直接输出
return 0;
}
程序执行结果为:
Li age= 20
Li add age= 21
   2.例
#include <iostream>
using namespace std;
class Point
{
public:
int x;
Point () : x(0) {  }
Point(int a) {x=a: }
void print ()  { cout <<" x="<<x<<endl;} 
void set_x(nt×) { x=x;}
};
int main()
{
Point pt(5);
pt.set_x(10);
pt.print();
return 0;
}
程序执行结果为:    x=5
若将set_x函数改为;   void set_x(int x) { this->x=x;}

执行结果为:     x=10

心得:一部分心得在上文中已有体现,但还有需要注意的地方,对象不要定义为全局变量(函数除外),构造函数一般要定义两个以上,包括不带参函数。类与对象在初学的时候就有模糊的接触,只是当时不怎么理解,照搬者居多,学到这里也只能说理解了是怎么回事,运用还需加强。                                                                                                                                                                                                                                                    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数字乡村和智慧农业的数字化转型是当前农业发展的新趋势,旨在通过应用数字技术,实现农业全流程的再造和全生命周期的管理服务。中国政府高度重视这一领域的发展,提出“数字中国”和“乡村振兴”战略,以提升国家治理能力,推动城乡融合发展。 数字乡村的建设面临乡村治理、基础设施、产业链条和公共服务等方面的问题,需要分阶段实施《数字乡村发展战略纲要》来解决。农业数字化转型的需求包括满足市民对优质农产品的需求、解决产销对接问题、形成优质优价机制、提高农业劳动力素质、打破信息孤岛、提高农业政策服务的精准度和有效性,以及解决农业融资难的问题。 数字乡村建设的关键在于构建“1+3+4+1”工程,即以新技术、新要素、新商业、新农民、新文化、新农村为核心,推进数据融合,强化农业大数据的汇集功能。数字农业大数据解决方案以农业数字底图和数据资源为基础,通过可视化监管,实现区域农业的全面数字化管理。 数字农业大数据架构基于大数据、区块链、GIS和物联网技术,构建农业大数据中心、农业物联网平台和农村综合服务指挥决策平台三大基础平台。农业大数据中心汇聚各类涉农信息资源和业务数据,支持大数据应用。信息采集系统覆盖市、县、乡、村多级,形成高效的农业大数据信息采集体系。 农业物联网平台包括环境监测系统、视频监控系统、预警预报系统和智能控制系统,通过收集和监测数据,实现对农业环境和生产过程的智能化管理。综合服务指挥决策平台利用数据分析和GIS技术,为农业决策提供支持。 数字乡村建设包括三大服务平台:治理服务平台、民生服务平台和产业服务平台。治理服务平台通过大数据和AI技术,实现乡村治理的数字化;民生服务平台利用互联网技术,提供各类民生服务;产业服务平台融合政企关系,支持农业产业发展。 数字乡村的应用场景广泛,包括农业生产过程、农产品流通、农业管理和农村社会服务。农业生产管理系统利用AIoT技术,实现农业生产的标准化和智能化。农产品智慧流通管理系统和溯源管理系统提高流通效率和产品追溯能力。智慧农业管理通过互联网+农业,提升农业管理的科学性和效率。农村社会服务则通过数字化手段,提高农村地区的公共服务水平。 总体而言,数字乡村和智慧农业的建设,不仅能够提升农业生产效率和管理水平,还能够促进农村地区的社会经济发展,实现城乡融合发展,是推动中国农业现代化的重要途径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值