C++ 面向对象编程系列(1)—— 类的成员函数和成员变量,包括 public、private、protected
程序员文章站
2022-03-11 17:57:40
...
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();
*/