类
类定义
class example_A
{
private: //私有成员
int a;
int b;
public: //公有成员
void sum(); //成员函数
example_A(); //构造函数
~example_A(); //析构函数
protected: //保护成员
};
成员类型
- private私有成员:只能由类成员(类内)和友元访问。
- public 公有成员:类内外的所有程序都能访问这些成员。
- protected保护成员:可以被派生类对象访问,不能被类外的程序访问。
构造函数与析构函数
- 构造函数:一般以类名来命名,是在新创建的对象时自动调用的函数。如果定义类时没写构造函数,编译器会自动生成一个缺省的构造函数。
- 构造函数中需要写入所有成员变量的初始化,也可以理解为一个类初始化函数,根据书写差异,构造函数可以将变量初始化为默认值:
默认初始化
example_A::example_A() //构造函数构建
{
a = 0;
b = 0;
}
- 那么在创建对象时候就可以直接写作
example_A* ex_A = new example_A(); //指针对象
example_A ex_B;
- 也可以初始化为传入的值:
传入值初始化
example_A::example_A(int x ,int y):a(x),b(y)//构造函数构建1
{
;
}
example_A::example_A(int x ,int y)://构造函数构建1
{
a = x;
b = y;
}
在创建对象时候就可以直接写作,将成员初始化为1,2
example_A* ex_A = new example_A(1,2); //指针对象
example_A ex_B(1,2);
- 相对,析构函数就是在对象消亡时即自动被调用。可以定义析构函数在对象消亡前做善后工作,如果定义类时没写析构函数,同样编译器会生成一个缺省的析构函数。例如,如果构造函数中有用new来初始化的变量时,需要在析构函数中对其使用delete进行回收。
example_A::~example_A()
{
cout << over << endl;
}
- 在析构函数中写入一段输出,运行以下代码
int main()
{
example_A* ex_A = new example_A(1,2);
example_A ex_B (1,2);
//ex_A 为new定义需要手动delete,而ex_B会在程序退出自动释放
delete ex_A;
return 0;
}
- 结果为
over
over
公有成员函数(对私有成员操作)
- 既然私有保护成员不能被外部代码访问(也就是调用,使用),那我们想更改或获取私有/保护成员的值就要通过公有成员中的成员函数来对私有/保护成员操作;
对私有函数操作的公有函数
void example_A::mun()
{
int c = a + b;
cout <<"a+b="<< c << endl;
}
- 废话不多说,上代码,看实际调用效果
int main()
{
example_A* ex_A = new example_A(1,2);
example_A ex_B (5,6);
cout << "ex_A调用结果:" << endl;
ex_A->mun();
cout << "ex_B调用结果:" << endl;
ex_B.mun();
delete ex_A;
return 0;
}
- 输出结果为;
ex_A调用结果:
a+b=3
ex_B调用结果:
a+b=11
over
over