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

C++中的类---封装与访问控制

程序员文章站 2022-07-16 09:31:51
...

//*******************************************************************************************
//类的封装:
/*基本概念:
1.封装是面向对象程序设计最基本的特性,把数据(属性)和函数(操作)合成一个整体,这在计算机世界中就是用类和对象实现的;
--封装:也就是把客观事物封装成为抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏;
——————备注:有两层含义:把属性和方法进行封装;对属性和方法进行访问控制。

2.类成员的访问控制:
C++中类的封装:
    成员变量:C++中用于表示类属性的变量;
    成员函数:C++中用于表示类行为的函数;

在C++中可以给成员变量和成员函数定义访问级别:
    public        修饰成员变量和成员函数可以在类的内部和类的尾部被访问;
    private        修饰成员变量和成员函数只能在类的内部被访问;
    protected   修饰在的成员变量和函数只能在类的内部被访问,用在继承里面;
*/

#include<iostream>
using namespace std;
//求圆的面积:
//类的封装:
class Mycircle {
public:
	double m_r;//属性,成员变量;
	double m_s;

public:
	double getR() {
		return m_r;
	}
	double setR(double r) {
		m_r = r;
		return m_r;
	}
	double getS() {
		m_s = 3.14*m_r*m_r;
		return m_s;
	}
};
//类做函数参数;
//类封装了成员的变量(属性)和成员函数(方法)
//可以调用类的成员函数;


//引用
void printfCircle01(Mycircle &myc) {
	cout << "R01 is :" << myc.getR() << endl;
	cout << "S01 is :" << myc.getS()<< endl;
}

//指针
void printfCircle02(Mycircle *pc) {
	cout << "R is : " << pc->getR() << endl;;		//和结构体不一样:不仅可以调用类的属性(对象),还能调用类的方法;
	//类封装了成员变量和成员函数;
	cout<<"S is :"<<pc->getS()<<endl;
}


int main()
{
	Mycircle c1, c2;
	c1.setR(10);
	cout << "c1.S:" << c1.getS() << endl;

	c1.setR(11);
	printfCircle02(&c1);//类指针作为函数形参;

	c1.setR(20);
	printfCircle01(c1);//类变量作为函数形参;

	return 0;
}

分别将形参设定为:类的引用,和类的指针;

//*****************************************************************************************************************************************************

类的控制访问:

#include<iostream>
using namespace std;
class MyAdcircle {
private:
	double m_r;//属性,成员变量;
	double m_s;

public:
	double getR() {
		return m_r;
	}
	double setR(double r) {
		m_r = r;
		return m_r;
	}
	double getS() {
		m_s = 3.14*m_r*m_r;
		return m_s;
	}
};
//默认情况下:变量或函数时 private 的;

int main()
{

	MyAdcircle c1, c2;
	//c1.m_r = 10;  //写在了类的外部,不可用;
	c1.setR(10);	//只能通过public的接口去操作类的内容;
	//private 相当于你的账户密码;public 相当于你的名字;
	cout << "R is : " << c1.setR(11) << endl;
	return 0;
}

 

/*
struct和class关键字区别
在用struct定义类时,所有成员的默认属性为public;
在用class定义类时,所有成员的默认属性为private;
*/

相关标签: C 学习