by Leozheng @ SRMVision
#include <iostream>
using namespace std;
class Foo {
public:
Foo() = default; // 默认构造函数, C++ 11
Foo(int n); // 重载了构造函数, 添加了参数 n
private:
int v = 0;
};
Foo::Foo(int n) {
v = n; // 设定初始值
cout << n << endl; // 也可以执行其他内容
}
// C++ 11 以后, 简单的初始化还可以这样写
Foo::Foo(int n) : v(n) {
cout << n << endl; // 执行其他内容
}
int main() {
Foo foo_1; // 执行默认构造函数
Foo foo_2(1); // 执行被重载的构造函数
}
#include <iostream>
using namespace std;
class Foo {
public:
// 不提供默认构造函数
Foo(int n) : v(n) {}
// 回顾一下 const 的用法
int value() const { return v; }
private:
int v = 0;
};
void bar(Foo foo) {
cout << foo.value() << endl;
}
int main() {
bar(1); // ?
}
#include <iostream>
using namespace std;
class Foo{
public:
// 默认析构函数同样可以使用 default 表示
// ~Foo() = default;
~Foo() {
cout << "对象销毁" << endl;
}
};
void bar(){
Foo foo;
// 退出函数前销毁 foo, 输出提示
}
int main(){
bar();
}
#include <iostream>
using namespace std;
class Foo {
public:
// 以下两个拷贝构造函数只能保留一个
// 浅拷贝
Foo(const Foo &foo) {
// 复制内容, 手动定义函数时需要手动执行
v = foo.v; arr = foo.arr;
cout << "浅拷贝" << endl; // 执行其他内容
}
// 深拷贝
Foo(const Foo &foo) {
v = foo.v;
// 注意此处的区别
for (int i = 0; i < 5; ++i)
arr[i] = foo.arr[i]
cout << "深拷贝" << endl;
}
private:
int v;
int arr[5];
};
#include <iostream>
Foo a(1); // 全局对象
void bar() {
Foo b(2); // 局部对象
static Foo c(3); // 静态对象
}
int main() {
Foo *d = new Foo d(4); // 动态创建对象
bar();
delete d; // 请注意回收内存
return 0;
}
请继续修改并优化您的时钟程序,要求:
1. 设计构造函数与拷贝构造函数。
2. 在之前的功能基础上,设计一个函数实现计算时间差的功能。
@ SRMVision