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

2020-11-20 11:34:18 +08:00
 NeilZhy1

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

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

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

}
}
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
2020-11-20 11:47:04 +08:00
@kilasuelika 貌似是可以的哈,返回引用也没有数据的拷贝的对吧,因为 vector<int> v; 数据量比较大,接口调用也比较频繁
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
2020-11-20 12:16:59 +08:00
const vector GetVector() const
{
return YourVector;
}
NeilZhy1
2020-11-20 12:30:31 +08:00
@kilasuelika 了解啦,多谢
whi147
2020-11-20 16:20:28 +08:00
还有友元函数也可以
whi147
2020-11-20 16:22:11 +08:00
还可以新写个类进行拷贝构造,方法很多
whi147
2020-11-20 16:22:50 +08:00
你要是想不进行拷贝就移动构造

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/727461

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX