赞
踩
差异特性 | struct | class |
---|---|---|
成员访问范围 | 默认public | 默认private |
继承关系访问范围 | 默认public | 默认private |
{}初始化 | 1、纯数据或纯数据+普通方法的结构体支持;2、带构造函数或虚方法的结构体不支持 | 不支持 |
struct Person {
int age;
}
Person *person = new Person();
person->age = 12;
可以正常的编译和执行。
class Person {
int age;
}
Person *person = new Person();
person->age = 12; // 编译出错,应改为public int age;
【扩展】如果不增加public关键字,又想在某个类如ClassA中能访问到这个Person类中的成员,可以通过友元类(friend class Xxx)来将Person中的private和protected的成员共享出去。
Person类可以这么编写:
struct Person {
friend class ClassA;
int age;
}
Person *person = new Person();
person->age = 12;
在ClassA中,就可以访问Person中的所有成员了。
void ClassA:setAge() {
Person *person = new Person();
person->age = 12;
}
关于友元类的使用,可见c++论坛:https://cplusplus.com/forum/beginner/147733/
指的是子对象是否可访问到父对象中的成员。
struct SBase { public: int age = 0; SBase() = default; virtual ~SBase() = default; }; struct Person : SBase { public: Person() = default; virtual ~Person() = default; }; int main(int argc, const char **argv) { Person* child = new Person(); child->age = 1; fprintf(stdout, "test: age=%d\n", child->age); }
访问正常。
class CBase {
public:
int age = 0;
CBase() = default;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。