在C++中,对象数组和成员对象是面向对象编程中常见的概念,它们各自具有不同的用途和特性。
对象数组
对象数组是同一类型对象的集合,这些对象在内存中连续存储。你可以通过数组索引来访问数组中的每个对象。对象数组在需要管理多个同类型对象时非常有用,比如存储一系列的学生信息、员工记录等。
示例:
#include <iostream>
using namespace std;
class Student {
public:
string name;
int age;
Student(string n, int a) : name(n), age(a) {}
void display() {
cout << "Name: " << name << ", Age: " << age << endl;
}
};
int main() {
Student students[3] = {
Student("Alice", 20),
Student("Bob", 22),
Student("Charlie", 21)
};
for(int i = 0; i < 3; i++) {
students[i].display();
}
return 0;
}
在这个例子中,Student类型的对象数组students被创建并初始化了三个Student对象。然后,通过遍历数组并调用每个对象的display成员函数来显示它们的信息。
成员对象
成员对象(也称为组合或内嵌对象)是另一个类的对象,它被声明为某个类的成员变量。这允许一个类通过其成员对象来访问另一个类的成员(包括公有、受保护和私有成员,如果后者是友元)。成员对象使得类能够复用其他类的功能,而无需重新实现这些功能。
示例:
#include <iostream>
using namespace std;
class Address {
public:
string street;
string city;
Address(string s, string c) : street(s), city(c) {}
void display() {
cout << "Street: " << street << ", City: " << city << endl;
}
};
class Person {
public:
string name;
Address addr; // 成员对象
Person(string n, string s, string c) : name(n), addr(s, c) {}
void display() {
cout << "Name: " << name << endl;
addr.display(); // 访问成员对象的成员函数
}
};
int main() {
Person p("John Doe", "123 Elm St", "Springfield");
p.display();
return 0;
}
在这个例子中,Person类包含了一个Address类型的成员对象addr。Person的构造函数接受额外的参数来初始化这个成员对象。Person的display成员函数调用Address的display成员函数来显示地址信息。这种方式使得Person类能够复用Address类的功能,而无需重新编写显示地址的代码。