类的声明基础
类与对象的声明
类的定义:具有相同属性和行为的对象集合,如人类就是一个集合,小华就是这个类的一个具体个体,可以称为对象
示例:
class C_Person
{
public:
int age;
void eat(){}
};
int main()
{
C_Person p; //栈区声明对象
p.age;
p.eat();
C_Person *p1 = new C_Person;//堆区申请对象
p1->age;
p1->eat();
delete p1;
return 0;
}
用class来表示一个类,public表示访问修饰符,其中数据成员age相当于属性,函数eat相当于行为。除了在static修饰的类的成员比较特殊,其他成员都需要通过对象来调用
访问修饰符
| 访问修饰符 | 作用范围 | 补充 |
|---|---|---|
| public | 类外可见 | C++的结构体默认是public |
| protected | 类内子类可见 | |
| private | 类内可见 | 在类内不写访问修饰符,默认为private |
友元
1.友元函数
#include <iostream>
using namespace std;
class C_Stu
{
private:
int age;
friend int getAge(C_Stu& stu);
friend void setAge(C_Stu& stu, int iAge);
};
void setAge(C_Stu &stu,int iAge)
{
stu.age = iAge;
}
int getAge(C_Stu& stu)
{
return stu.age;
}
int main()
{
C_Stu stu1;
setAge(stu1, 10);
int iAge = getAge(stu1);
cout << iAge << endl;
return 0;
}
结果:
从结果可以看出,友元函数使用friend来修饰,声明一个函数为类的友元函数,改函数可使用类的私有成员
- 友元类
class C_Teacher
{
public:
void setAge(C_Stu& stu, int iAge,string iName)
{
stu.age = iAge;
stu.name = iName;
}
private:
char course;
};
class C_Stu
{
protected:
string name;
private:
int age;
friend C_Teacher;
};
声明一个C_Stu的友元类为C_Teacher,此时C_Teacher可以使用C_Stu中private,protected修饰的数据成员,可以总结使用protected修饰的成员的两种方法为:继承和友元,使用private成员的方法为友元。
- 特点
- 不受访问修饰符的影响
- 可以有多个友元
- 缺点是破坏了类发封装性
本文使用 mdnice 排版