封装有2层含义:
1 . 把属性和方法进行封装 (对成员变量和成员函数进行封装,就是把这两个放在类里面)
2 . 对属性和方法进行访问控制(通过public、private、protected对成员函数和成员变量进行封装,以达到访问限制)
public: 修饰的成员变量和函数 可以在类的内部和类的外部访问
private: 修饰的成员变量和函数 只能在类的内部被访问,不能在类的外部访问
protected: 修饰的成员变量和函数 只能在类的内部被访问,不能在类的外部访问, 用在继承里面可以被子类继承
类的对象的3种调用方式:
1.通过指针调用(类名 *P)
2.通过引用调用(类名 &P)
3.通过函数类型声明变量调用(类名 P)这会涉及到函数的拷贝构造
#include "iostream"
using namespace std;
//求圆形的面积
class circul//定义一个圆类
{
int a = 0;//在class类中,未声明访问限制的变量是private型,而在struct中是public型
public:
double c_r;
double c_s;
public:
double get_area()
{
double area = c_r*c_r*3.14;
return area;
}
double get_long()
{
double Long = 2*c_r*3.14;
return Long;
}
};
//调用对象的三种方式
//1.通过指针调用
void printCircul1(circul *p)//注意,形参一定要用类型名修饰,即使是指针
{
cout << "圆的面积" << p->get_area() << endl;
cout << "圆的周长" << p->get_long() << endl;
}
//2.通过引用调用
void printCircul2(circul &p)
{
cout << "圆的面积" << p.get_area() << endl;
cout << "圆的周长" << p.get_long() << endl;
}
//3.通过函数类型声明变量调用,这会涉及到函数的拷贝构造
void printCircul3(circul p)
{
cout << "圆的面积" << p.get_area() << endl;//在调用成员函数时,c++的对象调用成员函数其实是隐含的传递了一个this指针,这个this指针指向调用对象的内存地址,p=*this;所以this也拥有p的相关属性
cout << "圆的周长" << p.get_long() << endl;
}
void main()
{
circul c1, c2;
c1.c_r = 10;//在一个类中,只要设置了变量的初始值,那么整个类中的函数都可以调用
cout << "c1 s: " << c1.get_area() << endl;
c2.c_r = 20;
printCircul1(&c2);//指针调用
printCircul2(c2);//引用调用
printCircul3(c2);//变量调用
system("pause");
}