C++的struct与class怎么用

发布时间:2022-04-20 13:44:14 作者:iii
来源:亿速云 阅读:201

C++的struct与class怎么用

在C++编程中,structclass是两种非常重要的数据结构定义方式。它们都可以用来定义复杂的数据类型,封装数据和行为。尽管它们在很多方面非常相似,但在使用上还是有一些细微的差别。本文将详细介绍structclass的用法,并探讨它们之间的区别。

1. struct与class的基本概念

1.1 struct

struct(结构体)是C语言中引入的一种数据结构,用于将不同类型的数据组合在一起。在C++中,struct不仅保留了C语言中的功能,还进行了扩展,使其可以包含成员函数、访问控制等特性。

struct Point {
    int x;
    int y;

    void print() {
        std::cout << "(" << x << ", " << y << ")" << std::endl;
    }
};

在上面的例子中,Point结构体包含了两个整型成员变量xy,以及一个成员函数print()

1.2 class

class(类)是C++中引入的一种更强大的数据结构,用于封装数据和行为。与struct类似,class也可以包含成员变量和成员函数,但它还支持访问控制(如publicprivateprotected)等特性。

class Point {
private:
    int x;
    int y;

public:
    Point(int x, int y) : x(x), y(y) {}

    void print() {
        std::cout << "(" << x << ", " << y << ")" << std::endl;
    }
};

在这个例子中,Point类包含了两个私有成员变量xy,以及一个公有构造函数和成员函数print()

2. struct与class的区别

尽管structclass在功能上非常相似,但它们之间还是有一些关键的区别。

2.1 默认访问控制

structclass在默认访问控制上有明显的区别:

这意味着,如果你在struct中定义了一个成员变量或函数,默认情况下它是公有的;而在class中,默认情况下它是私有的。

struct Point {
    int x;  // 默认是public
    int y;  // 默认是public
};

class Point {
    int x;  // 默认是private
    int y;  // 默认是private
};

2.2 继承的默认访问控制

在C++中,structclass在继承时的默认访问控制也有所不同:

struct Base {
    int x;
};

struct Derived : Base {  // 默认是public继承
    int y;
};

class Base {
    int x;
};

class Derived : Base {  // 默认是private继承
    int y;
};

2.3 使用场景

由于structclass在默认访问控制上的差异,它们通常用于不同的场景:

3. struct与class的用法

3.1 定义结构体和类

定义structclass的语法非常相似。以下是一个简单的例子:

// 使用struct定义
struct Point {
    int x;
    int y;

    void print() {
        std::cout << "(" << x << ", " << y << ")" << std::endl;
    }
};

// 使用class定义
class Point {
private:
    int x;
    int y;

public:
    Point(int x, int y) : x(x), y(y) {}

    void print() {
        std::cout << "(" << x << ", " << y << ")" << std::endl;
    }
};

3.2 访问控制

class中,可以使用publicprivateprotected关键字来控制成员的访问权限。

class Point {
private:
    int x;
    int y;

public:
    Point(int x, int y) : x(x), y(y) {}

    void print() {
        std::cout << "(" << x << ", " << y << ")" << std::endl;
    }

    int getX() const { return x; }
    int getY() const { return y; }
};

在这个例子中,xy是私有成员,只能在Point类的内部访问。print()getX()getY()是公有成员,可以在类的外部访问。

3.3 构造函数和析构函数

structclass都可以定义构造函数和析构函数。构造函数用于初始化对象,析构函数用于释放资源。

class Point {
private:
    int x;
    int y;

public:
    Point(int x, int y) : x(x), y(y) {
        std::cout << "Point created: (" << x << ", " << y << ")" << std::endl;
    }

    ~Point() {
        std::cout << "Point destroyed: (" << x << ", " << y << ")" << std::endl;
    }

    void print() {
        std::cout << "(" << x << ", " << y << ")" << std::endl;
    }
};

在这个例子中,Point类定义了一个构造函数和一个析构函数。构造函数在对象创建时被调用,析构函数在对象销毁时被调用。

3.4 成员函数

structclass都可以定义成员函数。成员函数可以访问类的成员变量,并且可以在类的内部和外部调用。

class Point {
private:
    int x;
    int y;

public:
    Point(int x, int y) : x(x), y(y) {}

    void print() {
        std::cout << "(" << x << ", " << y << ")" << std::endl;
    }

    void setX(int x) { this->x = x; }
    void setY(int y) { this->y = y; }

    int getX() const { return x; }
    int getY() const { return y; }
};

在这个例子中,Point类定义了多个成员函数,包括print()setX()setY()getX()getY()

3.5 静态成员

structclass都可以定义静态成员。静态成员属于类本身,而不是类的实例。静态成员变量在类的所有实例之间共享,静态成员函数可以直接通过类名调用。

class Point {
private:
    int x;
    int y;
    static int count;

public:
    Point(int x, int y) : x(x), y(y) {
        count++;
    }

    ~Point() {
        count--;
    }

    static int getCount() {
        return count;
    }
};

int Point::count = 0;

在这个例子中,Point类定义了一个静态成员变量count和一个静态成员函数getCount()count用于记录当前存在的Point对象的数量。

3.6 友元函数和友元类

class可以定义友元函数和友元类。友元函数和友元类可以访问类的私有成员。

class Point {
private:
    int x;
    int y;

    friend void printPoint(const Point& p);

public:
    Point(int x, int y) : x(x), y(y) {}
};

void printPoint(const Point& p) {
    std::cout << "(" << p.x << ", " << p.y << ")" << std::endl;
}

在这个例子中,printPoint()函数是Point类的友元函数,可以访问Point类的私有成员xy

4. 总结

structclass是C++中两种非常重要的数据结构定义方式。它们在功能上非常相似,但在默认访问控制和继承方式上有一些区别。struct通常用于表示简单的数据结构,而class通常用于表示更复杂的对象。在实际编程中,可以根据具体需求选择使用structclass

通过本文的介绍,相信你已经对structclass的用法有了更深入的了解。在实际编程中,灵活运用这两种数据结构,可以帮助你编写出更加高效、易维护的代码。

推荐阅读:
  1. 关于Swift中Struct,Class和Enum的哪些事儿
  2. C++ class

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++ struct class

上一篇:jquery如何修改min-height样式

下一篇:Sql Server中怎么实现行数据转为列显示

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》