当前位置:   article > 正文

C++类和对象实例解析_c++ 类实例 对象

c++ 类实例 对象
这篇文章主要介绍了C++类和对象,从定义出发再到实例解析,深入的理解C++类和对象,需要的朋友可以参考下

C++既是面向对象也是面向过程的语言,在这里就有一个重要的概念——
        何谓类?类是对对象的一种抽象,举例来讲:每一个实实在在存在的人就是一个对象,人有很多共同的特征(一个头,两条腿,能走,能跑),这具有共同特征的人就成为一个类。类是一个抽象的名词,每一个人(即对象)是这个类的实例。
        对象间具有的共同特征是对象的属性和行为。录像机是一个对象,它的属性是生产厂家、牌子、重量、颜色等等,它的行为就是它的功能,如录像、放像、快进、倒退等操作。
C++程序中,需要先定义一个类,形如:
  Class 类名
     { 
        定义变量;
        ….
        定义函数
      }
在类体中时成员列表,包括数据和操作数据的函数,即数据成员、成员函数。这体现了类的封装性和信息的隐蔽性。
成员函数一般在类体中声明,在类体外定义。
构造函数:对对象进行赋值
析构函数:在函数功能域结束时,释放对象成员的空间。
内联函数:为了节省函数调用的时间
完成各种功能函数…….
定义对象就需要对类进行实例化。形如:类名对象名

        类是一个抽象,它不占任何内存,只有当其实例化成为对象之后,才会给其分配空间。
        计算机中就是用对象来描述大千世界的事物。对象之间通过消息建立联系,借助函数完成各种各样的功能。
简单的说,这就是对象和类。

下面通过实例理解

【2-1】定义一个日C++类和对象期类date,该类对象存放一个日期,可以提供的操作有:取日期值,取年份,提取月份,提取日期以及设计日期值。
【分析】这个程序需要先定义一个类类型,这个类的数据成员有year,month,day,并且将其设计为private访问权限。还需要有5个成员函数,分别为:

  1. void getdate(); //取日期值,格式为“year-month-day”
  2. int getyear(); //取年份
  3. int getmonth(); //取月份
  4. int getday(); //取日期
  5. void setdate(int y,int m,int d); //设置日期值
  6. 程序代码如下:
  7. #include <iostream>
  8. using namespace std;
  9. class date
  10. {
  11. public:
  12. void getdate();
  13. int getyear();
  14. int getmonth();
  15. int getday();
  16. void setdate(int y,int m,int d);
  17. private:
  18. int year,month,day;
  19. };
  20. int date::getyear(){ return year; }
  21. int date::getmonth(){ return month; }
  22. int date::getday(){ return day; }
  23. void date::getdate()
  24. { cout<<"today is:"<<year<<"-"<<month<<"-"<<day<<endl; }
  25. void date::setdate(int y,int m,int d)
  26. { year=y; month=m; day=d; }
  27. int main()
  28. {
  29. date d;
  30. d.setdate(2011,2,1);
  31. cout<<"year="<<d.getyear()<<endl;
  32. cout<<"month="<<d.getmonth()<<endl;
  33. cout<<"day="<<d.getday()<<endl;
  34. d.getdate();
  35. return 0;
  36. }

【总结】这是一个最简单的类程序,但其中也存在不少问题。比如,如果没有setdate()函数,就无法对对象赋初值,而且必须按照特定的格式对对象进行设置初值。这个问题就应该采用构造函数来进行对象初始化。
【2-2】对例【2-1】进行改进,要求使用构造函数进行对象初始化,并且格式要不一致。
【分析】这个例子需要使用构造函数,并且要用到构造函数重载,使用默认参数值的构造函数和拷贝构造函数。
程序代码如下:

  1. #include <iostream>
  2. using namespace std;
  3. class date
  4. {
  5. public:
  6. date(int y=0,int m=0,int d=0)
  7. { year=y; month=m; day=d; }
  8. date(date &d)
  9. { year=d.year; month=d.month; day=d.day; }
  10. void getdate()
  11. { cout<<"today is:"<<year<<"-"<<month<<"-"<<day<<endl; }
  12. int getyear() { return year; }
  13. int getmonth() { return month; }
  14. int getday() { return day; }
  15. private:
  16. int year,month,day;
  17. };
  18. int main()
  19. {
  20. date d1(2011,2,1),d2,d3(d1);
  21. d1.getdate();
  22. d2.getdate();
  23. d3.getdate();
  24. return 0;
  25. }

【总结】程序中的对象d1有完整的实参表,则调用构造函数来进行对象初始化;对象d2没有实参表,系统同样自动调用构造函数进行对象初始化,只不过形参的值采用默认参数值进行初始化。对于对象d3,则采用拷贝构造函数进行初始化。
【2-3】输入数据到数组内求和、最大值、最小值与平均值后输出,将成员函数定义在类外。
【分析】这个程序时对C语言中所学内容的一个总结,是从面向过程到面向对象的跨越。这个类的数据成员应该包括数组。成员函数应该有数组输入函数、数组输出函数、求和函数、最大值函数、最小值函数和求平均值函数。
程序代码如下:

  1. #include <iostream>
  2. using namespace std;
  3. #define N 10
  4. class array
  5. {
  6. public:
  7. void input();
  8. void output();
  9. int max();
  10. int min();
  11. int sum();
  12. float average();
  13. private:
  14. int a[N],maxnumber,minnumber,sumnumber;
  15. float avenumber;
  16. };
  17. void array::input()
  18. {
  19. int i=0;
  20. cout<<"Please input "<<N<<" numbers:"<<endl;
  21. for(i=0;i<N;i++)
  22. {
  23. cout<<"a["<<i<<"]=";
  24. cin>>a[i];
  25. }
  26. }
  27. void array::output()
  28. {
  29. int i=0;
  30. cout<<"array a is:"<<endl;
  31. for(i=0;i<N;i++)
  32. cout<<a[i]<<" ";
  33. cout<<endl;
  34. }
  35. int array::max()
  36. {
  37. int i;
  38. maxnumber=a[0];
  39. for(i=1;i<N;i++)
  40. if(maxnumber<a[i])
  41. maxnumber=a[i];
  42. return maxnumber;
  43. }
  44. int array::min()
  45. {
  46. int i;
  47. minnumber=a[0];
  48. for(i=1;i<N;i++)
  49. if(minnumber>a[i])
  50. minnumber=a[i];
  51. return minnumber;
  52. }
  53. int array::sum()
  54. {
  55. int i;
  56. sumnumber=a[0];
  57. for(i=1;i<N;i++)
  58. sumnumber+=a[i];
  59. return sumnumber;
  60. }
  61. float array::average()
  62. {
  63. float ave=static_cast<float>(sumnumber/N);
  64. return ave;
  65. }
  66. int main()
  67. {
  68. array a;
  69. a.input();
  70. a.output();
  71. cout<<"The max number is "<<a.max()<<endl;
  72. cout<<"The min number is "<<a.min()<<endl;
  73. cout<<"The sum number is "<<a.sum()<<endl;
  74. cout<<"The average number is"<<a.average()<<endl;
  75. return 0;
  76. }

【总结】从上面的程序可以看出,类array里面包括对数组的各种操作,包括求和,求最大值,求最小值以及求平均值等。
【2-4】设计一个表示猫的类,包括猫的颜色、体重、年龄等数据,具有设置猫的颜色,修改和显示猫的体重、年龄等操作。
【分析】设计猫类的类名为Cat,此类有3个数据成员,颜色用string类表示,可以存放汉字,体重用实数类型表示,年龄用整数型表示,为了保护数据的安全性,3个数据成员全部为私有性。对猫的属性数据的设置和修改,全部为公有函数。
程序代码如下:

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. class Cat
  5. {
  6. public:
  7. Cat(string c="red",float w=1,int a=1);
  8. string get_color();
  9. float get_weight();
  10. int get_age();
  11. void display();
  12. private:
  13. string color;
  14. float weight;
  15. int age;
  16. };
  17. Cat::Cat(string c,float w,int a)
  18. {
  19. color=c;
  20. weight=w;
  21. age=a;
  22. }
  23. string Cat::get_color()
  24. {
  25. return color;
  26. }
  27. float Cat::get_weight()
  28. {
  29. return weight;
  30. }
  31. int Cat::get_age()
  32. {
  33. return age;
  34. }
  35. void Cat::display()
  36. {
  37. cout<<"The color of this cat is "<<get_color()<<endl;
  38. cout<<"The weight of this cat is "<<get_weight()<<endl;
  39. cout<<"The age of this cat is "<<get_age()<<endl;
  40. }
  41. int main()
  42. {
  43. Cat c1,c2("yellow",1,2);
  44. cout<<"c1 is:"<<endl;
  45. c1.display();
  46. cout<<"c2 is:"<<endl;
  47. c2.display();
  48. return 0;
  49. }

【总结】从上面的程序可以看出,构造函数可以用类对对象进行初始化,并且构造函数可以进行重载。

希望本文可以对大家学习c++编程语言有所帮助,也希望大家可以继续关注!

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号