c++中的对象组合与嵌套类.我该用哪个呢?
Object composition vs Nested class in C++.Which shall I use when?
c++提供了两个类似的条款来执行相同的任务。而对象组合似乎更方便,因为声明的类也可以用于其他类。
。"Address"类可以包含一些属性和函数,然后用作"Student"类的属性。或者,'Address'类也可以在'Student'类中声明(嵌套)。
所以我的疑问是,这些方法应该使用哪一种,什么时候使用?另外,是否认为一种方法比另一种方法更好?
将Student
类拆分为Address
类没有多大意义,除非有其他"东西"也需要Address
(见下文)-更合理的方法是有一个Person
类,然后从Person
派生Student
-以及Teacher
, Dean
或任何其他可能需要描述学校的类。这里的关键是看"什么是共同的,什么是单独的"。
但是在某些情况下Address
或Addressable
类是有用的。如果我们想要跟踪家庭,并且希望在某种形式的数据库(例如保险公司)中只有两个成年人,两个孩子,一条狗,一所房子和一辆车的整个家庭的Address
项,那么拥有单独的Address
可能确实有意义。如果家里的儿子(或女儿)后来搬去上大学,他将得到一个新的单独的地址(以及一张账单,以支付上大学与与母亲住在一起的额外风险)。爸爸)。
或者如果我们必须跟踪非Person
的事物-假设您不仅需要人员,还需要具有Address
的建筑物和设备。那么为"非人"answers"人"提供一套通用的功能就更有意义了。
这真的取决于你的目标是什么,你真的需要考虑数据的使用。没有一个确切的固定答案。分割太多和组合太多一样糟糕。
如果我正确理解你的问题,它是关于类定义一个子对象(这里Address
)是否应该在包含类内部与包含类(这里Student
)在同一级别上声明。
主要区别在于从子对象访问封闭类的私有或受保护成员。嵌套类是其外围类的成员,可以访问所有的私有成员(参考:11.7)。[/p] .
下面是一个嵌套类访问其封闭类的私有成员的示例:
class Person {
public:
class Address {
public:
std::string street;
std::string town;
std::string state;
Address(std::string street, std::string town, std::string state)
:street(street), town(town), state(state) {}
void print(std::ostream&, const Person& p) const;
};
Person(std::string firstname, std::string lastname, Address address);
private:
std::string firstname; // private member
std::string lastname;
Address address;
// other members ...
};
Person::Person(std::string firstname, std::string lastname, Address address)
:firstname(firstname), lastname(lastname), address(address) {};
void Person::Address::print(std::ostream& out, const Person& p) const {
// access to private members of Person class
out << p.firstname << " " << p.lastname << std::endl;
out << street << std::endl;
out << town << std::endl;
out << state << std::endl;
}
- C++中的对象组合
- C++对象文件和程序文件组合编译的 Bashrc 别名
- clang libc :make_tuple与make_shared的组合导致早期对象破坏
- C++组合从 istream 获取的类对象
- 覆盖组合对象的<<运算符会给出错误 C++
- 使用 Arduino 中的构造函数进行对象组合
- Qt C++根据组合框中的选择创建一个对象
- 使用参数组合创建对象
- 面向对象编程和对象组合,如何放置组合属性?
- c++ 在对象组合上使用重载构造函数
- 对象组合与提供显式包装器
- 是否可以使用C++对象组合,其中对象的选择是在运行时确定的
- c++中的对象组合与嵌套类.我该用哪个呢?
- 使用framebuffer对象组合图像
- 对象组合促进了代码重用.(T / F)的原因
- 对象组合c++:没有匹配的函数调用
- 关于>>、<<运算符和 cin 和 cout 对象组合的问题
- 对象组合-无法访问对象属性
- 将多个对象组合成一个返回对象
- C++如何处理对象组合中出现的错误