类
oi wiki原文:链接
引入
- 结构体属于类的一种,因某些原因被c++保留
- 类是结构体的拓展,其区别在于增加了成员函数
// Example:
class Object {
public:
int weight;
int value;
} e[array_length];
与使用 struct 大同小异。该例定义了一个名为 Object 的类。该类拥有两个成员元素,分别为 weight,value;并在 } 后使用该类型定义了一个数组 e。
访问说明符
- public:该访问说明符之后的各个成员都可以被公开访问,简单来说就是无论 类内 还是 类外 都可以访问。
- protected:该访问说明符之后的各个成员可以被 类内、派生类或者友元的成员访问,但类外 不能访问。
- private:该访问说明符之后的各个成员 只能 被 类内 成员或者友元的成员访问,不能 被从类外或者派生类中访问。
对于 struct,它的所有成员都是默认 public。对于 class,它的所有成员都是默认 private。
关于友元以及派生类的基本概念
友元(friend):使用 friend 关键字修饰某个函数或者类。可以使得在 被修饰者 在不成为成员函数或者成员类的情况下,访问该类的私有(private)或者受保护(protected)成员。简单来说就是只要带有这个类的 friend 标记,就可以访问私有或受保护的成员元素。
派生类(derived class):C++ 允许使用一个类作为 基类,并通过基类 派生 出 派生类。其中派生类(根据特定规则)继承基类中的成员变量和成员函数。可以提高代码的复用率。
派生类似 “is” 的关系。如猫(派生类)”is” 哺乳动物(基类)。
对于上面 private 和 protected 的区别,可以看做派生类可以访问基类的 protected 的元素(public 同),但不能访问 private 元素。
什么意思呢?我阐述一下我自己的观点:
class digua2010 {
private:
int a = 1;
bool b = 1;
public:
void print(){
cout << a;
}
};
digua2010 edge;
int main() {
edge.print();
return 0;
}
这里我在类内调用print函数,可以成功访问private类型的a并输出
class digua2010 {
private:
int a = 1;
bool b = 1;
public:
void print(){
cout << a;
}
};
digua2010 edge;
int main() {
cout << edge.a;
return 0;
}
而这个程序就会报错“*[Error] ‘int digua2010::a’ is private within this context*”
为什么?因为a我们设置了private类型,该类型不支持从类外访问。所以我们从主函数直接访问edge.a就出错了。
由于csp不会真的去考友元以及派生类的代码,所以了解其定义就可以了。