c++在类内定义类和在类外定义类的区别, 举个示例
时间: 2023-07-10 14:36:00 浏览: 114
C++中在类内定义类与在类外定义类的区别主要有以下几点:
1.访问权限:在类内定义类时,嵌套类可以访问外部类的私有成员,而在类外定义类时,独立类不能访问外部类的私有成员,只能访问公共和受保护的成员。
2.作用域:在类内定义类时,嵌套类的作用域被限制在外部类的作用域内,因此它们对外部世界是隐藏的,而在类外定义类时,独立类的作用域不受限制,因此它们对外部世界是可见的。
下面是一个示例:
```c++
// 在类内定义类
class A {
public:
class B {
public:
void foo(A& a) {
a.x = 10; // 嵌套类可以访问外部类的私有成员
}
};
private:
int x;
};
// 在类外定义类
class C {
public:
void bar(A& a) {
a.x = 10; // 独立类不能访问外部类的私有成员
}
};
int main() {
A a;
A::B b;
b.foo(a);
C c;
c.bar(a); // 编译错误,不能访问 A 的私有成员 x
return 0;
}
```
在上面的示例中,类A中定义了一个嵌套类B,在B的成员函数中可以访问A的私有成员x。另外,类C是在A外部定义的独立类,它的成员函数不能访问A的私有成员x,会导致编译错误。
相关问题
C++在类外部定义内置函数
在C++中,我们可以在类外部定义内置函数,也就是不是类的成员函数的函数。这些函数可以被类的成员函数或其他函数调用。
下面是一个示例代码:
```cpp
class MyClass {
public:
void myMemberFunction(); // 声明一个成员函数
};
void myNonMemberFunction() {
// 在这里编写函数体
}
void MyClass::myMemberFunction() {
// 在这里编写函数体
myNonMemberFunction(); // 调用非成员函数
}
int main() {
MyClass obj;
obj.myMemberFunction(); // 调用成员函数
return 0;
}
```
在上面的代码中,我们定义了一个名为`myNonMemberFunction`的非成员函数,并且在类`MyClass`的成员函数`myMemberFunction`中调用了它。
需要注意的是,在类外部定义内置函数时,函数必须在类的声明之后,否则编译器会报错。
C++中,在一个类中定义另一个类
在C++中,在一个类中定义另一个类,可以使用嵌套类(nested class)或内部类(inner class)的方式来实现。
1. 嵌套类
嵌套类是指在类的内部定义的另一个类,与外部类是相互独立的。嵌套类可以是公共的、私有的或受保护的。以下是一个示例:
```C++
class OuterClass {
public:
class InnerClass {
public:
void print() {
cout << "Hello from InnerClass!" << endl;
}
};
};
```
在这个示例中,OuterClass中定义了一个名为InnerClass的嵌套类。InnerClass中定义了一个名为print的成员函数。
2. 内部类
内部类是指在类的内部定义的另一个类,与外部类是有关联的。内部类可以访问外部类的成员变量和成员函数。以下是一个示例:
```C++
class OuterClass {
public:
class InnerClass {
public:
void print() {
cout << "Hello from InnerClass!" << endl;
cout << "x = " << x << endl;
}
};
int x;
};
```
在这个示例中,OuterClass中定义了一个名为InnerClass的内部类。InnerClass中定义了一个名为print的成员函数,可以访问外部类的成员变量x。