欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++ 面向对象编程系列(1)—— 类的成员函数和成员变量,包括 public、private、protected

程序员文章站 2022-03-11 17:57:40
...

C++ 面向对象编程系列(1)——
类的成员函数和成员变量,包括 public、private、protected
C++ 面向对象编程系列(1)—— 类的成员函数和成员变量,包括 public、private、protected

#pragma once
//本程序可直接粘贴在.cpp文件中运行,
//仅用于了解private和public在类继承中如何对类成员赋予权限,
#include <iostream>
using namespace std;


//定义一个基类,名为“图形”
class shape
{
public:
	//构造函数
	shape(double _x, double _y, double _sacle, int _color)
		:x(_x), y(_y), scale(_sacle), color(_color) {}
	//析构函数
	virtual ~shape() {}

	//以下为验证 private成员变量、成员函数 对 public成员函数进行访问
	//移动横坐标
	double move_x(double _x)
	{
		x = _x;
		return x;
	}
	//移动纵坐标
	void move_y(double _y)
	{
		y = _y;
	}
	//放缩尺度
	double resize(double _scale)
	{
		scale = _scale;
		return scale;
	}
	//标准化
	void normalize()
	{
		reset();
	}

	//以下为验证 protected成员变量、成员函数 对 public成员函数进行访问
	//仅用来调用基类保护成员函数
	void call_show_color()
	{
		show_color();
	}
	//仅用来访问基类保护成员变量
	int access_color()
	{
		color = 255;
		return color;
	}
	//基类私有成员(包括私有成员变量和私有成员函数)
private:
	//基类私有成员变量
	double x;		//横坐标
	double y;		//纵坐标
	double scale;	//尺度
					//基类私有成员函数
	void reset()	//重置横纵坐标和尺度坐标
	{
		x = y = 0.0;
		scale = 1.0;
	}
	//基类保护成员(包括保护成员变量和保护成员函数)
protected:
	//基类保护成员变量
	int color;				    //颜色
								//基类保护成员函数
	void show_color() {}		//显示颜色(空函数)
								//基类公有成员(均为成员函数)			
};

//主函数,测试两种类对象对其内部各变量的操作权限
int main()
{
	//1. 测试“图形”对象以说明
	//一个普通基类对象对其private成员、protected成员和public成员的访问权限。
	//类对象s1仅可直接访问以下属于public的成员函数。

	shape s1(10, 20, 1.0, 127);  // 调用构造函数

								 // 对象通过访问 public 间接访问(而 public 访问 private) private 成员函数和变量
	double result1 = s1.move_x(15);
	s1.move_y(25);
	s1.normalize();
	double result2 = s1.resize(2.0);
	s1.~shape();              //析构函数
							  // 对象通过访问 public 间接访问(public 访问 protected) protected 成员函数和变量
	s1.access_color();
	s1.call_show_color();
	int result3 = s1.access_color();

	cout << "s1.move_x(15)" << "   "<< "s1.resize(2.0)" << "   " << "s1.access_color() " << endl;
	cout << result1 << "   " << result2 << "   " << result3 << endl;

	//s1.x = 22;	//成员变量x位于private当中,类对象s1无法直接访问它。
	//但s1.move_x(15)这个类对象的public成员函数却可以访问x。
	//s1.reset();	//成员函数reset()位于private当中,类对象s1无法直接访问它。
	//但s1.normalize()这个类对象的public成员函数却可以访问reset()。
	//s1.color = 255;	//成员变量color位于protected当中,类对象s1无法直接访问它。
	//但s1.access_color()这个类对象的public成员函数却可以访问color。
	//s1.show_color();	//成员函数show_color()位于protected当中,
	//类对象s1无法直接访问它。
	//但s1.call_show_color()这个类对象的public成员函数却可以访问show_color()。

	//综上,类对象不可以直接访问private、protected的成员变量和成员函数,
	//只能通过类内部的其他成员函数访问它们,
	//这就是封装应有的效果。

	system("pause");
	return 0;
}
/*
//2. 测试“长方形”对象以说明
//一个派生类对象对其所继承的基类的private成员、protected成员和public成员,以及
//其新增添的private成员与public成员的访问权限。
//类对象r1仅可以直接访问以下属于public的成员函数。

rectangule r1(11, 21, 1.0, 5.0, 127);
//所继承的基类自带的public成员函数
r1.move_x(1.0);
r1.move_y(1.2);
r1.normalize();
r1.resize(2.0);

//派生过程中新添加的public成员函数
r1.amplify2();
r1.reset_rect2();
r1.set_angle(5.1);
r1.set_long();
r1.set_square();
r1.~rectangule();
r1.d_call_show_color();
r1.d_access_color();
*/

相关标签: