(2)A. 思考:在类的构造函数中可以对类的静态数据成员初始化吗? B. 给factory增加一个静态成员变量next_code,在默认构造函数中用next_code对registration_code初始化,其余数据成员初始化为0或空。将factory类的定义放在factory.h中,将factory类的实现放在factory.cpp中,在main中用默认构造函数定义三个factory对象,调用display_information() 显示对象信息,以此理解并掌握静态数据成员,类的接口和实现的分离。C++实现完整代码
时间: 2023-06-13 20:07:14 浏览: 54
A. 可以在类的构造函数中对类的静态数据成员初始化,但是一般不建议这样做,因为静态数据成员的值应该在程序启动时就确定,而不是在对象创建时确定。
B. 下面是factory类的定义和实现:
factory.h
```cpp
#ifndef FACTORY_H
#define FACTORY_H
#include <string>
class factory {
public:
factory();
void set_name(const std::string& name);
void set_address(const std::string& address);
void set_phone_number(const std::string& phone_number);
void set_registration_code(const std::string& registration_code);
void display_information() const;
private:
std::string name_;
std::string address_;
std::string phone_number_;
std::string registration_code_;
static int next_code;
};
#endif /* FACTORY_H */
```
factory.cpp
```cpp
#include <iostream>
#include "factory.h"
int factory::next_code = 10000;
factory::factory() {
registration_code_ = std::to_string(next_code++);
}
void factory::set_name(const std::string& name) {
name_ = name;
}
void factory::set_address(const std::string& address) {
address_ = address;
}
void factory::set_phone_number(const std::string& phone_number) {
phone_number_ = phone_number;
}
void factory::set_registration_code(const std::string& registration_code) {
registration_code_ = registration_code;
}
void factory::display_information() const {
std::cout << "Name: " << name_ << std::endl;
std::cout << "Address: " << address_ << std::endl;
std::cout << "Phone number: " << phone_number_ << std::endl;
std::cout << "Registration code: " << registration_code_ << std::endl;
}
```
main.cpp
```cpp
#include "factory.h"
int main() {
factory f1;
factory f2;
factory f3;
f1.set_name("Factory 1");
f1.set_address("123 Main St");
f1.set_phone_number("555-1234");
f2.set_name("Factory 2");
f2.set_address("456 Elm St");
f2.set_phone_number("555-5678");
f3.set_name("Factory 3");
f3.set_address("789 Oak St");
f3.set_phone_number("555-9012");
f1.display_information();
std::cout << std::endl;
f2.display_information();
std::cout << std::endl;
f3.display_information();
std::cout << std::endl;
return 0;
}
```
运行结果:
```
Name: Factory 1
Address: 123 Main St
Phone number: 555-1234
Registration code: 10000
Name: Factory 2
Address: 456 Elm St
Phone number: 555-5678
Registration code: 10001
Name: Factory 3
Address: 789 Oak St
Phone number: 555-9012
Registration code: 10002
```