类 methd 包含相同的类对象
Class methd contains the same class object
在
func1
和func2
合法吗?类 methd 包含相同的类对象。
例:
class Foo
{
public:
void func1() {
//...
Foo foo; // Is it legal?
//...
}
// Is it legal in paramete?
void func2(Foo object) {
//...
}
// It is legal using reference
// http://stackoverflow.com/questions/6921185/why-do-objects-of-the-same-class-have-access-to-each-others-private-data
void func3(Foo& object) {
//
}
};
合法吗?
是的
为什么?
class Foo
{
public:
void func1() {
//...
Foo foo; // Is it legal?
//...
}
};
类成员函数的主体是在考虑整个类定义之后编译的。
因此,整个类可用于方法的实现,包括在当前方法之后声明的方法和成员。
这在 [class.mem] 中有介绍。
在类成员规范中,类在函数体、默认参数、引入继承构造函数的 using 声明、异常规范和非静态数据成员(包括嵌套类中的此类内容(的大括号或等于初始值设定项中被视为完整的。
是的,这在您所有情况下都是合法的。
但是在复制的构造函数中是非法的:
// here should be 'const Foo&'
Foo(const Foo object);
说得
很草率,自由函数和成员函数之间的唯一区别是成员函数将this
作为第一个参数传递(你没有明确看到它,但它就在那里(。这并不完全正确,但足以理解没有理由不在 Foo
的成员函数中具有Foo
。
你不能做的是这样的:
struct Bar {
Bar x;
};
这不仅是一个非常奇怪的结构("它的一直向下",以防万一你知道这句话(,而且你的编译器会清楚地告诉你它行不通。
是的,在所有这三种情况下都是合法的。
当然它是100%合法的,这是许多运算符需要的参数,许多其他函数使用...
看看这个取自 String 类的例子:
string& operator+= (const string& str);
所以字符串类有一个函数将另一个字符串作为参数......
相关文章:
- 将包含C样式数组的对象初始化为成员变量(C++)
- 是否需要删除包含对象的"pair"?
- 如何在h文件中包含.o对象文件
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 具有包含其他对象的类的对象创建顺序
- 复制包含C++所有元素的对象!(构造函数和赋值,最佳实践?
- C++ 在堆栈中包含多态属性的类对象存储
- 将 C# 对象(包含静态对象成员)作为参数传递给 C++/CLI 程序
- 如何在构建时将 JSON 文件/对象包含在C++中
- 当对象包含其他对象的向量时,无法设置值
- 在矢量内创建一个对象,该对象由另一个对象包含
- 为什么在 C++ 中,当对象包含在另一个对象中时,复制构造函数被调用两次
- 当对象包含指针成员时,堆栈上的对象销毁出现分段错误
- 如果插槽对象包含互斥锁和条件变量,则 Boost signals2 connect() 调用编译失败
- 当包含对象包含unique_ptr时,如何删除向量的元素
- vector包含类对象,每个类对象包含3个字符串.我如何找到特定的字符串,然后删除整个元素
- 自定义对象的STL集合,每个对象包含一个STL集合
- 导出DLL接口中包含相同类的STL类成员
- 有多少对象(包含 std::vectors)加载到 L1/L2/L3 缓存中
- 将主应用程序对象包含在 try-catch 块中捕获所有崩溃