一起学习交流~

c/c++细节知识点 07class和struc和union三者的区别与联系

c++面试准备 laomuji 1个月前 (08-16) 98次浏览 已收录 0个评论

默认访问控制

/*
默认访问控制
struct,union 为public
class 为private
*/
struct Struct7_1 {
    int i;
    double d;
};
class Class7_1 {
    int i;
    double d;
};
union Union7_1 {
    int i;
    double d;
};
int main7_1() {
    Struct7_1 s1{};
    Class7_1 c1{};
    Union7_1 u1{};
    //s1.c;
    //c1.c; 只有c1.c 不能访问,默认为private,另外两个为public
    //u1.c;
    return 0;
}

成员函数

/*
都可以有成员函数
都可以使用{}进行初始化,但三者都各有不同
struct 会按照顺序初始化变量
class  只有当类中所有的变量都是public时才能初始化
union  只能初始化第一个变量,传入的值会被强制转换为第一个变量同类型的值

在c++20时 增加了一个初始值设定项(designated initializers) 指定初始化的顺序
使用指定的初始值设定项至少需要“/std:c++20”
*/
struct Struct7_2 {
    int i;
    double d;
    void show() {
        cout << "struct function" << " " << i << " " << d << endl;
    }
};
class Class7_2 {
public:
    int i;
    double d;
public:
    void show() {
        cout << "class function" << " " << i << " " << d << endl;
    }
};
union Union7_2 {
    int i;
    double d;
    void show() {
        cout << "union function" << " " << i << " " << d << endl;
    }
};
int main7_2() {
    Struct7_2 s2{1,2};
    Class7_2 c2{1,2};
    Union7_2 u2{ 123.321 };//union只能初始化共用体的第一个变量
    //Union7_2 u2{ .d = 123.312 };//指定初始值设定项 在c++20才能使用,可以指定要初始化union中的变量
    s2.show();
    c2.show();
    u2.show();
    return 0;
}

继承

/*
继承的区别
结构体默认公有继承
类默认私有继承
共用体不可继承
*/

struct Struct7_3 : Struct7_1 {short s;};
class Class7_3 : Struct7_1 {short s;};
//union Union7_3 : Union7_1 {short s;}; //共用体不能用于继承

int main7_3() {
    Struct7_3 s3{};
    s3.d;
    Class7_3 c3{};
    //c3.d;//class默认私有继承,只有公有继承时才能被访问,无论是继承结构体还是继承类
    return 0;
}

编译器搜索规则

/*
编译器搜索规则
在c++中 如果 没有同名的函数,可以省略前面的struct、class、union
如果有同名的函数,会当作函数来处理,如果必须要使用,则要指定前面的struct、class、union
*/

struct Struct7_4 {
    int i;
    double d;
    Struct7_4(int a) {
        i = a;
        d = a * 2;
        cout << a << endl;
    }
};

class Class7_4 {
    int i;
    double d;
public:
    Class7_4(int a) {
        i = a;
        d = a * 2;
        cout << a << endl;
    }
};

union Union7_4 {
    int i;
    double d;
    Union7_4(int a) {
        i = a;
        d = a * 2;
        cout << a << endl;
    }
};
void Struct7_4() {
    cout << "hello1" << endl;
}
void Class7_4() {
    cout << "hello2" << endl;
}
void Union7_4() {
    cout << "hello3" << endl;
}
int main7_4() {
    Struct7_4();
    Class7_4();
    Union7_4();
    //已经被当作函数了,无法调用构造函数
    //Struct7_4 s(123);
    //Class7_4 c(123);
    //Union7_4 u(123);
    //必须手动指定
    struct Struct7_4 s(123);
    class Class7_4 c(123);
    union Union7_4 u(123);

    return 0;
}
喜欢 (0)
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论