类与对象之对象成员


The function of good software is to make the complex appear to be simple.

​ ————-Grady Booch

Main Point

  • 认识对象成员
  • 掌握对象成员的构造与析构

一.定义

对象成员简单地说就是在定义一个新类型是,可以用已有的类类型实例化对象作为数据成员使用。

class A	
{

};
class B
{

}
class C
{
private:

public:
int x;
int y;
A obj_a;
B obj_b;
}

其中x,y 是普通的数据成员,而obj_a,obj_b是类类型A和B实例化的对象,再次作为C的数据成员出现,称之为对象成员。

​ 注:对象成员和任何其他成员一样,存在服务属性问题。如果对象成员在新类中被定义为private,则只能从新类内部引用,如果将对象成员在新类中定义为public,就可以在新类外部对其进行访问,但是对象成员本身的私有属性成员仍然是不可直接访问的。

二.对象成员的构造与析构

​ 与普通对象一样,对象成员在创建时需要调用构造函数,在生命周期结束时需要调用析构函数。

构造与析构函数的调用次序
#include<iostream>
#include<string>
using namespace std;
class A
{
public:
A()
{
cout << "创建A\n";
}
~A()
{
cout << "析构A\n";
}
};
class B
{
A a;
public:
B()
{
cout << "创建B\n";
}
~B()
{
cout << "析构B\n";
}
};

int main()
{
B obj;

return 0;
}
创建A
创建B
析构B
析构A
含有参数的对象成员构造函数的调用
#pragma once
#include<iostream>
using namespace std;
class CDate
{
int Date_Year, Date_Month, Date_Day;
public:
CDate(int y = 2000, int m = 1, int d = 1);
CDate(const CDate &date);
void Display();

};

#pragma once
#include "l3_09.h"
#include<iostream>
#include<string>
using namespace std;
class Croster
{
string name;
CDate birthday;
public:
Croster(string na, int y, int m, int d);
void Display();
~Croster();

};

#include "l3_09.h"
using namespace std;
CDate::CDate(int y, int m, int d):Date_Year(y),Date_Month(m),Date_Day(d)
{
cout << "Constructor called.\n";
}

CDate::CDate(const CDate& date)
{
Date_Year = date.Date_Year;
Date_Month = date.Date_Month;
Date_Day = date.Date_Day+1;
cout << "Copy Constructor called.\n";

}

void CDate::Display()
{
cout << Date_Year << "-" << Date_Month << "-" << Date_Day << endl;
}
#include "l4_02.h"

Croster::Croster(string na, int y, int m, int d) :birthday(y, m, d)
{
cout << "Croster constructor called.\n";
name = na;
}

void Croster::Display()
{
cout << name << endl;
birthday.Display();
}

Croster::~Croster()
{
cout << "Croster deconstructor called.\n";

}
#include "l4_02.h"
int main()
{
Croster stuA("王衍", 2000, 3, 27);
stuA.Display();
return 0;
}
Constructor called.
Croster constructor called.
王衍
2000-3-27
Croster deconstructor called.

三.总结

​ 在实际应用中,在已有的简单类的基础上构建新的复杂类,不仅能提高开发行了,而且增加代码的可维护性。


Author: T1g3r
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source T1g3r !
评论
  TOC