sdau C++ 类与对象(上)

类(Class)
定义:类是对象的抽象。相同特征的一组对象进行抽象形成了类。

比如,可以对不同的学生个体进行抽象,形成学生类。

本质上讲,类也是一种数据类型,是由程序员根据处理问题的需要自己创建的一种数据类型,即用户自定义的数据类型,而一个具体的对象可以视为属于这一数据类型的一个变量。

任何一个对象都是通过类的实例化之后得到的。

类型(type) 是一个概念的具体表示。如果不能用内置类型表达一个概念,则我们设计一个新类型去表达一个概念。
任何一个数据类型都封装两方面的信息:数据操作

|
是由数据成员成员函数组成,

数据成员:定义了该类对象所共有的属性(类似于结构体成员);
成员函数:定义了该类对象所共有的操作(类似于结构体中的函数)。

|

简单的类的举例
一个student 的类;
该类对象所共有的属性:姓名,学号,专业,年级,数学成绩,英语成绩…
该类对象的操作
输出每个对象的信息
修改每个对象的信息,等等
利用学生类可以构造一个学生对象

类是一种用户自定义类型,声明形式:

class 类名称
{
public:
     公有成员(外部接口)
private:
     私有成员
protected:
     保护型成员
};                           //此处必须要以分号结尾

类的任何成员都必须指定访问属性。
一般将数据成员定义为私有成员或保护成员,将成员函数定义为公有成员。

private:
只能由1.该类中的函数、2.其友元函数访问。
不能被任何其他访问,该类的对象也不能访问。

public:可以被
1.该类中的函数、2.派生类的函数、
3.其友元函数访问,也可以由
4.该类的对象访问。

钟表类
class Clock
{
public: 
       void SetTime(int NewH, int NewM, int NewS);
       void ShowTime();                      //成员函数
private: 
     int Hour, Minute, Second;               //成员数据
};

|

圆类
const float pi=3.14;
class Circle
{
public:
        void SetRadius (float r1){r=r1;} 
        float GetPerimeter(){ return 2*pi*r;}
        float GetArea(){ return pi*r*r;                //成员函数
        }
private: 
        float r;                                //成员数据
};

成员数据:与一般的变量声明相同,但需要将它放在类的声明体中。
|

|

类定义和使用时应注意:

  1. 在类的声明中不能对数据成员进行初始化。

  2. . 类的任何成员都必须指定访问属性,一般将数据成员定义为私有成员或保护成员, 成员函数定义为公有成员。

  3. 类中的数据成员可以是C++语法规定的任意数据类型,但不能用存储类型auto、register或extern进行修饰。

  4. 类的成员可以是其他类的对象,但不能以类自身的对象作为本类的成员。

  5. 类定义必须以分号“;”结束

  6. class与struct的不同:
    ①class中,成员缺省情况是private。 ②struct中,成员缺省情况是public。

成员函数

可以在类中说明原型,在类外给出函数体实现,并在函数名前使用类名加以限定。
将成员函数在类外定义的一般形式是:

返回类型  类名∷成员函数名(参数表)
 {
     // 函数体
} 

也可以直接在类内给出函数体,形成内联成员函数。
允许声明重载函数和带默认形参值的函数

钟表类例子

class Clock
{
public: 
        void SetTime(int NewH, int NewM, int NewS);
         void ShowTime();
private: 
         int Hour, Minute, Second;
};

void Clock::SetTime(int NewH, int NewM,int NewS)
{
   Hour=NewH;
   Minute=NewM;
   Second=NewS;
}
void Clock::ShowTime()
{
      cout<<Hour<<":"<<Minute<<":"<<Second;
}

类中成员的访问方式
类中成员互访:直接使用成员名
类外访问:使用“对象名.成员名”方式访问 public 属性的成员。

对象成员的引用:一般形式: 对象名.成员名
在类外只能访问public成员,不能访问private成员。

通过指向对象的指针访问对象中成员
一般形式:指针名->成员名

|
例:

一圆形游泳池如图所示,现在需在其周围建一圆
形过道,并在其四周围上栅栏。栅栏价格为35元 /米,过道造价为20元/平方米。过道宽度为3米,
游泳池半径由键盘输入。要求编程计算并输出过
道和栅栏的造价。

#include <iostream>
using namespace std;
const float PI = 3.14159;
const float FencePrice = 35;
const float ConcretePrice = 20;
                                 //声明类Circle 及其数据和方法
class Circle
{
private:
           float radius;
public:
           setRadius(float r); 
           float Circumference(); //圆周长
           float Area(); };              //圆面积
                                        // 类的实现
                                        // 初始化数据成员radius
Circle::setRadius(float r)
{radius=r;} 
                                   // 计算圆的周长
float Circle::Circumference()
{
return 2 * PI * radius;
}
                                  // 计算圆的面积
float Circle::Area()
{
return PI * radius * radius;
}

void main ()
{
float radius;
float FenceCost, ConcreteCost; 
                                  // 提示用户输入半径
cout<<"Enter the radius of the pool: ";
cin>>radius;
                               // 声明 Circle 对象
                               //Circle Pool(radius);
                               //Circle PoolRim(radius + 3); 
Circle Pool;
Circle PoolRim; 
Pool.setRadius(radius);
PoolRim.setRadius(radius+3); 
                                                    //计算栅栏造价并输出
FenceCost=PoolRim.Circumference()*FencePrice;

cout<<"Fencing Cost is ¥"<<FenceCost<<endl;
                                                     //计算过道造价并输出
ConcreteCost=(PoolRim.Area()-Pool.Area())*ConcretePrice;
cout<<"Concrete Cost is ¥"<<ConcreteCost<<endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值