类声明和定义中的共有和私有类型的一些注意事项。

在类的定义和成员函数的定义中,总结下需要注意的地方。

         1.私有成员和函数,使用类的对象的程序不能直接访问,必须通过公有部分的函数或者是成员才能访问,否则会出现错误。可以在公有成员函数定义中直接使用私有成员和函数。

         2.对于一个类,接口就是公有部分,私有部分就是数据隐藏的部分,外界是不能直接访问的。构造函数一定是公有的成员函数,构造函数可以使用函数从重载,即可以有多个构造函数(必须是函数重载)。同时,构造和析构函数都没有返回值类型。

         3.公有和私有成员函数在函数定义中都可对类的私有数据成员进行处理,比如:赋值、运算等等。在公有函数的定义中可以直接调用私有成员函数。

         4.在类的声明中就定义的函数自动被视为内联函数。当然也可以在类声明将成员函数定义为内联函数。

        以下是一个例子,为了方便将类的声明和定义写在一个.h文件中。

#ifndef HEAR_H
#define HRAR_H

#include <iostream>
using namespace std;

class Image
{
private:
	int number;
	int width;
	int height;
	int bandnum;
	int graysum;
	void SetImage()
	{
		graysum = width * height * bandnum;
	}
public:
	Image(int wid, int hei, int band);
	Image::Image(int wid, int hei, int band, int grsum);
	void show();
	int name;
};

void Image::show()
{
	SetImage();
	number = 10;
	cout << "width = " << width << endl;
	cout << "height = " << height << endl;
	cout << "bandnum = " << bandnum << endl;
	cout << "number = " << number << endl;
	cout << "总数是: " << graysum << endl;
}

Image::Image(int wid, int hei, int band)
{
	width = wid;
	height = hei;
	bandnum = band;
}

Image::Image(int wid, int hei, int band, int grsum)
{
	width = wid;
	height = hei;
	bandnum = band;
	graysum = grsum;
}

#endif
          主函数代码如下:

          

#include <iostream>
#include "header.h"

using namespace std;

int main()
{
	Image A(255, 255, 3);
	A.show();
	cin.get();
	return 0;
}

          上面,公有函数show中直接调用了私有函数SetImage函数。在公有函数中可以对私有成员进行访问和处理,例如,在show函数中对number私有数据成员进行了赋值和输出操作。同时,在私有函数SetImage中对类的私有成员进行了访问处理。同时,构造函数重载了,一个有三个输入参数,一个有四个输入参数,具体运行哪个由输入的参数个数决定。上诉代码的运行结果如下:

         

         例如,如果在程序中对类的私有成员或者函数调用或者是处理都是出错的。

        

       如果所示,红的波浪线说明是有错误的,不能对私有成员width和私有函数SetImage进行访问和处理。其实,仔细会发现,声明了一个之后,另一行,对象名字后打下一个点号“.”编译器会提示后面可以输入的函数或者是变量,提示的部分就是公有部分,私有部分不会出现在提示中。

       还有:私有函数可以对公有部分的变量进行访问和处理,私有函数可以调用公有函数,但是私有函数不能直接被调用,直接通过共有函数来间接调用,公有函数可以直接被类对象直接调用。例如:

       

#ifndef HEAR_H
#define HRAR_H

#include <iostream>
using namespace std;

class Image
{
private:
	int number;
	int width;
	int height;
	int bandnum;
	int graysum;
	void SetImage()
	{
		graysum = width * height * bandnum;
		mm++;
	}
	void Gutu()
	{
		cout << "mmm" << endl;
		show();
	}
public:
	Image(int wid, int hei, int band);
	Image::Image(int wid, int hei, int band, int grsum);
	void show();
	void aa()
	{
		Gutu();
	}
	int name;
	int mm = 0;
};

void Image::show()
{
	SetImage();
	number = 10;
	cout << "width = " << width << endl;
	cout << "height = " << height << endl;
	cout << "bandnum = " << bandnum << endl;
	cout << "number = " << number << endl;
	cout << "mm =" << mm << endl;
	cout << "总数是: " << graysum << endl;
}

Image::Image(int wid, int hei, int band)
{
	width = wid;
	height = hei;
	bandnum = band;
}

Image::Image(int wid, int hei, int band, int grsum)
{
	width = wid;
	height = hei;
	bandnum = band;
	graysum = grsum;
}

#endif
         SetImage()私有函数使用了公有成员mm, 私有函数Gutu函数调用了公有函数show函数。总结:私有函数可以调用和使用公有函数和成员变量。

         主函数如下:

       

#include <iostream>
#include "header.h"

using namespace std;

int main()
{
	
	Image A(255, 255, 3);
	A.show();
	A.aa();
	A.mm = 100;
	cin.get();
	return 0;
}
           公有的成员变量在程序中可以直接访问和使用,公有的函数成员可以直接程序中被类对象调用。私有函数和私有成员只能通过公有函数间接使用和调用,类对象能直接调用和使用的只有公有部分的成员和函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值