结论:
1. 嵌套类可以使用外部类中定义的私有类型,无须加命名域符;
2. 嵌套类中无法直接访问外部类的成员变量和成员函数,无论公有私有都不行。
用下面的代码测试过了,嵌套类(成员类)可以使用外部类的私有类型(type)但是不能访问外部类中的私有成员变量,也不能调用外部类中的成员函数。
/*!
* This test code shows nested class can use the private type of enclosing
* class, but cannot access the members and functions of enclosing class, no
* matter private and public
*/
#include <iostream>
class Encloser {
public:
Encloser(double x, double y, double k1 = 1.0, double k2 = 1.0)
: member_(Nester(x, y)), k1_(k1), k2_(k2) {}
double Calculate() { return (member_.Show().x_ + member_.Show().y_) * k1_ * k2_; }
double Add(double a, double b) { return a + b; }
double k2_ = 1.0;
private:
class PrivateClass {
public:
double x_;
double y_;
};
class Nester {
public:
Nester(double x, double y) : member_({x, y}) {}
inline const PrivateClass& Show() { return member_; }
// inline double ShowK1() { return k1_; }
// inline double showK2() { return k2_; }
double InnerCalculate() {
double result = 0.0;
// result = Add(member_.x_, member_.y_);
// result = Product(result, k1_);
// result = Product(result, k2_);
return result;
}
private:
PrivateClass member_;
};
double k1_ = 1.0;
Nester member_;
double Product(double a, double b) { return a * b; }
};
int main() {
Encloser enclose_object(2.0, 3.0, 4.0);
std::cout << "The result is: " << enclose_object.Calculate() << std::endl;
return 0;
}
【 在 foliver 的大作中提到: 】
: 嵌套类没有父类都this指针,所有需要用到父类的都不可以。你这代码显然不行。
: 嵌套类是父类都一个成员,所以父类的变量访问权限通通对嵌套类开放。
:
--
修改:wanllow FROM 36.163.208.*
FROM 36.163.208.*