类和结构体
结构体的默认访问类型是public,类的默认访问类型是private
通常使用类来实现类描述,结构限制为了存粹的表示数据类型
内联方法
1. 定义位于类声明的函数都将自动成为内联函数
class Stock
{
private:
void set_tot() {……};
}
2. 在类之外定义成员函数,使用inline使其成为内联函数
class Stock
{
private :
void set_tot();
}
inline void Stock::set_tot()
{
…….
}
存储问题
所创建的每个对象都有自己的存储空间,用于存储其内部变量和类成员;但同一个类的所有对象共享一组类当法。
构造函数和析构函数
构造函数:专门用于构造新对象,将值赋给数据成员,程序声明对象时,将自动调用构造函数。
注意点:
1. 构造函数的参数名不能和类成员相同,通常在数据成员名前使用”m_”或者在数据成员名后加”_”.
2. 当且仅当没有定义任何构造函数时,编译器才会提供默认构造函数。
3. 为类定义构造函数后,就必须提供默认构造函数。
4. 设计类是,通常应该提供所有对类成员做隐式初始化的默认构造函数。
析构函数:程序过期时,完成清理工作的函数。析构函数的名称在类名前加~,没有参数。
析构函数调用的时机:
1. 静态存储类对象,程序结束时自动调用。
2. 自动存储类队形,程序执行完代码块时自动调用。
3. 用new创建的对象,使用delete释放内存时自动调用。
4. 创建临时对象时,在结束对该对象使用时自动调用。
//.h 文件
class Flower
{
private:
double m_num;
int m_color;
int m_val;
void set_tot() {m_num = m_val * m_color;}
public:
Flower(); //默认构造函数
//构造函数名不能和数据成员名重复
//定义了构造函数默认构造函数一定要有
Flower(int color = 0, int val = 0);
//析构函数
~Flower();
void Buy(int color, int val);
void Show();
};
//.cpp 文件 类方法具体实现
Flower::Flower()
{
std::cout<< "默认构造函数初始化" <<std::endl;
m_num = 0;
m_color = 0;
m_val = 0;
}
Flower::Flower(int color, int val)
{
std::cout<< "自定义的构造函数初始化" <<std::endl;
m_color = color;
m_val = val;
set_tot();
}
Flower::~Flower()
{
std::cout<<"析构函数调用"<<std::endl;
}
void Flower::Buy(int color, int val)
{
set_tot();
}
void Flower::Show()
{
std::cout<<m_color<<"*"<<m_val<<"="<<m_num<<std::endl;
}
//.cpp文件 main
int main(){
// 大括号为了让析构函数调用语句能打印 优先执行代码块
{
Flower flower2(2,3);
flower2.Show();
}
return 0;
}