V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NeilZhy1
V2EX  ›  C

求问, C++ 中如何提供接口让用户变量私有成员变量 vector

  •  
  •   NeilZhy1 · 2020-11-20 11:34:18 +08:00 · 2016 次点击
    这是一个创建于 1499 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用 C++ 定义了一个类,类内部定义了一个私有成员变量 vector,如何提供接口让用户能够访问这个变量这个 vector

    11 条回复    2020-11-20 16:22:50 +08:00
    Tony042
        1
    Tony042  
       2020-11-20 11:38:26 +08:00
    用 get set 函数提供这个 vector 的引用或者拷贝就可以了
    kilasuelika
        2
    kilasuelika  
       2020-11-20 11:39:19 +08:00 via Android
    返回一个 const 引用。
    class A{
    public:
    const vector<int>& get_v(){
    }
    }
    kilasuelika
        3
    kilasuelika  
       2020-11-20 11:40:47 +08:00
    V2EX 没有删除功能?上一个没有写完。

    返回一个 const 引用。
    class A{
    public:
    const vector<int>& get_v(){

    }
    }
    kilasuelika
        4
    kilasuelika  
       2020-11-20 11:41:29 +08:00
    返回一个 const 引用。
    class A{
    public:
    const vector<int>& get_v(){
    return v;
    };
    private:
    vector<int> v;
    };
    NeilZhy1
        5
    NeilZhy1  
    OP
       2020-11-20 11:47:04 +08:00
    @kilasuelika 貌似是可以的哈,返回引用也没有数据的拷贝的对吧,因为 vector<int> v; 数据量比较大,接口调用也比较频繁
    kilasuelika
        6
    kilasuelika  
       2020-11-20 12:00:20 +08:00
    @NeilZhy1 有没有数据复制,要看对方是怎么接收数据的。下面这个例子:

    #include <iostream>
    #include<vector>

    class A {
    public:
    A():v(2,0) {
    std::cout << v.data() << " ";
    };
    const std::vector<int>& get_v() {
    return v;
    };
    private:
    std::vector<int> v;
    };

    int main()
    {
    A a;
    auto v0 = a.get_v(); //不共享数据
    auto& v0_r = a.get_v(); //共享数据
    const std::vector<int>& v1 = a.get_v(); //共享数据
    std::vector<int> v2 = a.get_v(); //不共享数据
    std::cout <<v0.data()<<" "<<v0_r.data()<<" "<< v1.data() << " " << v2.data() << std::endl;
    };

    1. auto 关键字不考虑引用,默认是没有引用的,所以相当于用一个引用来构造一个新的 v0,所以没有共享数据,有复制。
    2. a 与 v0_r, v1 是共享数据的,v0 和 v2 是新的变量,发生了数据复制。
    lifetimeporn
        7
    lifetimeporn  
       2020-11-20 12:16:59 +08:00
    const vector GetVector() const
    {
    return YourVector;
    }
    NeilZhy1
        8
    NeilZhy1  
    OP
       2020-11-20 12:30:31 +08:00
    @kilasuelika 了解啦,多谢
    whi147
        9
    whi147  
       2020-11-20 16:20:28 +08:00 via iPhone
    还有友元函数也可以
    whi147
        10
    whi147  
       2020-11-20 16:22:11 +08:00 via iPhone
    还可以新写个类进行拷贝构造,方法很多
    whi147
        11
    whi147  
       2020-11-20 16:22:50 +08:00 via iPhone
    你要是想不进行拷贝就移动构造
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2804 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 06:01 · PVG 14:01 · LAX 22:01 · JFK 01:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.