【C++】第2章 类和对象初步

目录

2.1   类的定义和使用

2.2   类的示例程序剖析

2.3   访问对象的成员

2.4   类成员的可访问范围

        2.4.1   private和public访问范围说明符

        2.4.2   “隐藏”的作用


2.1   类的定义和使用

        在C++中,类的定义方法如下:

                class 类名{

                    访问范围说明符:

                        成员变量1

                        成员变量2

                        ...

                        成员函数声明1

                        成员函数声明2

                    访问范围说明符:

                        更多成员变量

                        更多成员函数声明

                        ...

                };

        类的定义要以";"结束。

        “范围访问说明符”一共有三种:public、private和protected。“范围访问说明符”可以出现任意多次。

        “成员变量”的写法与普通的变量定义相同。称其为成员变量,是因为这些变量是一个类的成员。同样的,“成员函数声明”的写法也与普通的函数声明相同。一个类的成员函数之间可以互相调用。类的成员函数可以重载,也可以设定参数的默认值。

        以前所学的函数不是任何类的成员函数,可称为“全局函数”。

        成员函数的实现可以位于类的定义之外,格式如下:

                返回值类型 类名::函数名()

                {

                        语句组

                 }

        定义类之后,就可以定义对象了。定义对象的基本方法如下:

                类名 对象名;

2.2   类的示例程序剖析

        分析略(作为复习笔记应较为熟练掌握)。

#include <iostream>
using namespace std;
class CRectangle
{
	public:
		int w, h;                     //成员变量,宽和高
		void init( int w_,int h_ );   //成员函数,设置宽和高
		int area();                   //成员函数, 求面积
		int perimeter();              //成员函数,求周长
};                                    //必须有分号
void CRectangle::init( int w_,int h_ )
{
	w = w_;  h = h_;
}
int CRectangle::area()
{
	return w * h;
}
int CRectangle::perimeter()
{
	return 2 * ( w + h);
}
int main( )
{
	 int w,h;
	 CRectangle  r;                    //r是一个对象
	 cin >> w >> h;
	 r.init( w,h);
	 cout << "It's area is " << r.area() << endl;
	 cout << "It's perimeter is " << r. perimeter();
  	 cout << sizeof(CRectangle) << endl;
	 return 0;
}

2.3   访问对象的成员

        除了前面提到的“对象名.成员名”方法,还可以用“指针->成员名”的方式来访问对象的成员。例如:

CRectangle r1, r2;
CRectangle* p1 = &r1;
CRectangle* p2 = &r2;
p1->w = 5;                //此处的w属于p1指向的对象
p2->init(5, 4);           //init函数作用在p2指向的对象上

        还可以用“引用名.成员名”的方式访问对象的成员。例如:

CRectangle r2;
CRectangle & rr = r2;
rr.w = 5;
rr.init(5, 4);            //rr的值改变,r2的值也改变

        调用类的成员函数时,必须指明其所作用的对象。

        类还有另外一种写法,就是将class关键字换成struct。没有成员函数的struct还是称作“结构”,结构变量不是对象;有成员函数的struct就是类。写成struct的类和写成class的类只在类成员的可访问范围方面有一点很小的差别,后面很快会提到。

        和结构变量一样,对象之间可以用“=”互相赋值,但不能用“==”、“!=”、“<”、“>”、“<=”、“>=”进行比较运算,除非这些运算符经过适当的“重载”(见第4章)。

2.4   类成员的可访问范围

        2.4.1   private和public访问范围说明符

        在类的定义中,可以用private、public和protected三种关键字来指定成员可被访问的范围。

        private:用来指定私有成员。一个类的私有成员,不论是成员变量还是成员函数,都只能在该类的成员函数内部才能被访问。

        public:用来指定公有成员。一个类的公有成员在任何地方都可以被访问。

        protected:用来指定保护成员。这需要等介绍“继承”之后再解释。

        三种关键字出现的次数和先后次序都没有限制。成员变量的可访问范围由离它前面最近的那个访问范围说明符决定。如果某个成员前面没有访问范围说明符,则对class来说,该成员默认地被认为是私有成员;对struct来说,该成员默认地被认为是公有成员。

        2.4.2   “隐藏”的作用

        设置私有成员的机制叫做“隐藏”。“隐藏”的一个目的就是强制对成员变量的访问一定要通过成员函数进行。这样做的好处是,如果以后修改的成员变量的类型等属性,只需要更改成员函数即可;否则,所有直接访问成员变量的语句都需要被修改。

        “隐藏”机制还可以避免对对象的不正确操作。有点成员函数只是设计用来让同类的成员函数调用的,并不希望对外开放,因此就可以将它们声明为私有的,隐藏起来。在设计类的时候,应当尽可能隐藏使用者不需要知道的实现细节,只留下必要的接口(即一些成员函数)来对对象进行操作,这样能够避免类的使用者随意使用成员函数和成员变量而导致错误。


注:原书“2.1   结构化程序设计的不足”“2.2   面向对象程序设计的概念和特点”涉及编程思路,作者目前水平有限,对此感悟理解不到位,故暂不整理。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值