我们假设我们已经给出了一个以下函数
We assume that we have given a following function
我们假设我们给出了以下函数:
class MyClass
{
MyClass(double var) {
this->var = var;
}
protected:
double var;
};
MyClass foo( MyClass1 obj) {
}
在功能foo()
我们希望访问obj.var
.但是怎么做呢?我们不能再次使用关键字double
,所以我们不能创建getter getVar()
更重要的是,我们不能让我们的函数foo()
为MyClass
的朋友此外,foo()
不能成为一种方法。
Makr MyClass1
MyClass
的子类,并通过成员函数提供对MyClass::var
的公共访问:
MyClass1 : public MyClass
{
public:
auto v()->decltype((var)) // returns a reference to var
{
return var;
}
};
然后
MyClass foo( MyClass1 obj) {
obj.v()++; // increments var
return obj;
}
请注意,这要求MyClass::MyClass(double)
构造函数是非私有的。
另一种选择是在派生类中公开var
。但是,如果你发现自己在实际代码中这样做,你必须停下来问自己几个问题:
MyClass1 : public MyClass
{
public:
using MyClass::var; // look! var is now public
};
MyClass foo( MyClass1 obj) {
obj.var++; // increments var
return obj;
}
不能从类外部访问类的受保护成员或任何派生对象。如果您不能直接更改MyClass
但想要访问protected
值,则可以使用定义 getter 的另一种类型从该值继承。
class MyClass
{
public:
MyClass(double var) : member_var(var) {}
protected:
double member_var;
};
class OtherClass : public MyClass
{
public:
OtherClass(double var) : MyClass(var) {}
double get_member(void) const { return member_var; }
};
可以将派生类用于foo
。
OtherClass foo(OtherClass obj)
{
double x = 5.0 + obj.get_member();
}
相关文章:
- 是否可以定义一个以向量<T>作为值的unordered_map?
- 有没有一种 STL 方法可以找到字符串的所有排列,给出一个以 C++ 为单位的大小?
- 我是 C++ 的新手,我试图调用 make 一个以 2 个类作为其参数的类构造函数
- 我怎么能有一个以2D数组为参数的函数,而数组有一个我想更改的参数/维度
- llvm 调用一个以 char * 作为参数的外部函数
- 我不知道如何创建一个以数字/字母顺序打印出我的整数或字符串的程序
- 如何构造一个以可变参数指针函数作为成员的类?
- C++从文件中读取不同类型的数据,直到有一个以数字开头的字符串
- 如何创建一个以键为输入并在C++std:map中查找值的模板函数
- 努力理解一个以十六进制、十进制、bin 和 dec 计算数字总和的程序
- 创建一个以存储线程并调用它们的类
- std::string::c_str() 是否总是返回一个以 null 结尾的字符串
- 如何生成一个以非null结尾的c字符串
- 如何为链接列表节点定义一个以指针为模板类型的模板类
- 设计一个以统一方式返回多个接口的类
- 将一个以10为基数的数字转换为另一个基数
- 制作一个以坐标为键的std::映射
- 如何编写一个以boost::Range为参数的函数
- 声明一个以我自己的类作为值类型的映射
- 如何编写一个以C++代码为输入的C++代码生成器