感谢内容提供者:金牛区吴迪软件开发工作室
接上一篇:C++程序设计【二】之面向对象的基本概念
文章目录
第三章:类和对象进阶
一、构造函数
1.构造函数的作用
2.构造函数的定义
3.构造函数的使用
4.复制构造函数与类型转换构造函数
二、析构函数
示例:
使用delete语句
现在修改类 myDate 和类 Student 的无参构造函数和析构函数如下:
myDate::myDate(): year(1970), month(1), day(10) {
cout << "myDate 构造函数" << endl;
}
myDate::~myDate() {
cout << "myDate 析构函数" << endl;
}
Student::Student(): name("Noname"), birthday(myDate()) {
cout << "Student 构造函数" << endl;
}
Student::~Student() {
cout << "Student 析构函数" << endl;
}
如果在主函数中执行以下语句:
Student *stud = new Student();
delete stud;
则得到信息如下:
myDate 构造函数
Student 构造函数
Student 析构函数
myDate 析构函数
三、类的静态成员
1.静态变量
2.类的静态成员
#include <iostream>
using namespace std;
static int glos = 100;
void f() {
int a = 1; // 局部自动变量a
static int fs = 1; // 静态局部变量fs,完成初始化。
cout << "在f中:a(自动)=" << a << " fs(静态)=" << fs << " glos(静态)=" << glos << endl;
a += 2;
fs += 2;
glos += 10;
cout << "在f中:a(自动)=" << a << " fs(静态)=" << fs << " glos(静态)=" << glos << endl;
// cout << "ms= " << ms << endl; // 改行错误,变量ms不可见。
}
int main() {
static int ms = 10;
for (int i = 1; i <= 3; i++) {
f();
}
// cout << "fs = " << fs << endl; 该行报错,变量fs不可见。
cout << "ms=" << ms << endl;
cout << "glos=" << glos << endl;
return 0;
}
四、变量及对象的生存期和作用域
1.变量的生存期和作用域
2.类对象的生存期和作用域
五、变量成员和常引用成员
1.常量成员和常引用成员
六、成员对象和封闭类
1.封闭类构造函数的初始化列表
2.封闭类的复制构造函数
七、友元
1.友元
#include <iostream>
#include <cmath>
using namespace std;
class Pixel; // 前向引用声明
class Text {
public:
void printX(Pixel p); // 用到了类Pixel
};
class Pixel {
private:
int x, y;
public:
Pixel(int x0, int y0) {
x = x0;
y = y0;
}
void printxy() {
cout << "pixel:(" << x << "," << y << ")" << endl;
}
friend double getDist(Pixel p1, Pixel p2);
friend void Test::printX(Pixel p);
};
void Test::printX(Pixel p) {
cout << "x=" << p.x << " y=" << p.y << endl; // 访问类Pixel的私有成员
return;
}
double getDist(Pixel p1, Pixel p2) { // 友元函数在类体外定义
double xd = double(p1.x - p2.x); // 使用类Pixel的私有成员x
double yd = double(p1.y - p2.y); // 使用类Pixel的私有成员y
return sqrt(xd * xd + yd * yd); // 俩点间距离
}
int main() {
Pixel p1(0, 0), p2(10, 10);
p1.printxy();
p2.printxy();
cout << "(p1, p2)间距离=" << getDist(p1, p2) << endl;
Test t;
cout << "从友元函数中输出--" << endl;
t.printX(p1); // 通过对象调用类的成员函数
t.printX(p2); // 通过对象调用类的成员函数
return 0;
}
2.友元函数
3.友元类
八、this指针
class myDate {
public:
myDate();
myDate(int, int, int);
private:
int year, month, day;
};
myDate::myDate() {
year = 1970;
month = 1;
day = 1;
}
// 加参数的例一
myDate::myDate(int y, int m, int d) {
year = y;
month = m;
day = d;
}
// 其实加参数的例一可以写成下面这样,只不过简写了而已
myDate::myDate(int year, int month, int day) {
this -> year = year;
this -> month = month;
this -> day = day;
}
金牛区吴迪软件开发工作室博客