当我们在使用C++语言的时候,常常会用到两个类似的关键字:struct 和 class,虽然从最初的设计上来说,两者是等价的。但是,在实际使用中,两者还是有所不同的。
struct和class的定义
首先,我们先看struct和class在定义上的区别。定义一个struct的方式如下:
struct Student {
int age;
char name[20];
};
而定义一个class的方式如下:
class Student {
private:
int age;
char name[20];
public:
void setAge(int age) {
this->age = age;
}
int getAge() {
return age;
}
};
从定义上,我们可以看到struct中的成员默认是公有的,而class中的成员默认是私有的。因此,如果我们想要在class中调用成员变量,需要使用public关键字进行公开。
struct和class的区别
在使用上,struct和class之间的区别主要有以下几点:
- 默认访问权限不同
我们已经在定义部分介绍过了,struct中的成员默认是公有的,而class中的成员默认是私有的。因此,在使用struct时,我们需要特别小心,因为它可能会将一些本应该是私有的对象暴露出来。而在class中,我们可以使用public关键字明确让成员变量公开,同时使用private关键字将一些成员变量封装起来。
- 成员函数默认不同
在struct中,成员函数默认是public的;而在class中,成员函数默认是private的。如果我们想让一个class对象调用它的成员函数,我们需要将它声明为public。
- 继承方式不同
在struct中,继承默认是public的;而在class中,继承默认是private的。因此,如果我们要使用继承并且希望派生类的成员可以访问基类中的成员,那么使用struct更为方便。
struct和class的应用
下面我们用两个具体的示例来说明struct和class的应用:
首先是一个struct的示例:
struct Point {
int x;
int y;
void print() {
std::cout << x << ", " << y << std::endl;
}
};
int main() {
Point p;
p.x = 0;
p.y = 0;
p.print();
return 0;
}
这个示例中,我们使用了一个struct来表示一个点,点的x和y坐标是公有的,通过print函数进行打印,我们可以很清晰地看到这个点的位置。
接下来,是一个class的示例:
class Dog {
private:
std::string name;
int age;
public:
Dog(std::string n, int a) {
name = n;
age = a;
}
void bark() {
std::cout << "my name is " << name << ", I am " << age << " years old" << std::endl;
}
};
int main() {
Dog dog("Tommy", 3);
dog.bark();
return 0;
}
这个示例中,我们使用了一个class来表示一只狗,狗的名字和年龄是私有的,通过构造函数进行初始化,并且我们在类中定义了一个对外公开的函数bark,当这只狗被呼叫的时候,它会自我介绍。
通过这两个示例,我们可以更加清晰地看到struct和class之间的差异,以及它们在不同的场景中的应用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中关键字Struct和Class的区别 - Python技术站