在这篇博客中,我们将讨论C++中与类相关的一些概念和用法,并提供相应的示例代码。
一、类相关非成员函数
在C++中,我们可以定义与类相关的非成员函数,这些函数可以操作类的对象。下面是一个示例代码:
class Time {
public:
int hour;
int minute;
int second;
Time(int h, int m, int s) {
hour = h;
minute = m;
second = s;
}
};
void WriteTime(Time t) {
cout << "The time is: " << t.hour << ":" << t.minute << ":" << t.second << endl;
}
int main() {
Time mytime(12, 15, 7);
WriteTime(mytime);
return 0;
}
二、类内初始化
在C++11中,我们可以为类内的成员变量提供一个初始值,这样在创建对象时,这个初始化值就会用来初始化该成员变量。示例代码如下:
class Time {
public:
int hour = 0;
int minute = 0;
int second = 0;
};
int main() {
Time mytime;
cout << "The time is: " << mytime.hour << ":" << mytime.minute << ":" << mytime.second << endl;
return 0;
}
三、const成员变量的初始化
const成员变量的初始化必须在构造函数的初始化列表中进行,不能通过赋值操作来初始化。示例代码如下:
class Time {
public:
const int hour;
Time(int h) : hour(h) {}
};
int main() {
Time mytime(12);
cout << "The hour is: " << mytime.hour << endl;
return 0;
}
四、默认构造函数
默认构造函数是没有参数的构造函数,用于对象的默认初始化。**如果类没有定义构造函数,编译器会为我们隐式地定义一个默认构造函数。**示例代码如下:
class Time {
public:
int hour;
int minute;
int second;
};
int main() {
Time mytime;
cout << "The time is: " << mytime.hour << ":" << mytime.minute << ":" << mytime.second << endl;
return 0;
}
五、=default;和=delete;
C++11引入了**=default;
**和**=delete;
**两种新写法。=default;
可以让编译器为我们自动生成函数体,而=delete;
**可以显式地禁用某个函数。**示例代码如下:
class Time {
public:
Time() = default;
Time(const Time&) = delete;
};
int main() {
Time t1; // 使用默认构造函数
Time t2(t1); // 编译错误,禁用了拷贝构造函数
return 0;
}