//类的声明 定义和实现
//car.h头文件,用来声明并定义类
#ifndef CAR_H_ //防止被重复引用头文件
#define CAR_H_
#i nclude <string>
using namespace std;
struct color
{
unsigned char red;
unsigned char blue;
unsigned char green;
};
class car
{
private:
char id[32+1];
string name;
color clr;
public:
void print();
void getColor(color& ref_clr);
void setColor(color _clr);
};
#endif/**CAR_H_/
=========
#i nclude "car.h"
void car::print()
{
cout<<"ID:"<<name<<endl;
}
void car::getColor(color& ref_clr)
{
ref_clr=clr;
}
void car::setColor(color _clr)
{
clr=_clr;
}
=============
//类的内联函数和非内联函数
class A
{
public:
void fun()
{
}
};
//等同于
//.h文件
class A
{
public:
void fun()
};
//.cpp文件
inline void A::fun()
{
}
============
//构造函数,就理解为初始化函数
class car
{
public:
car() //注意没有void,和类同名
{
//内存清零,设置颜色为(0,0,0)
memset(&clr,0,sizeof(color))
//设置颜色为(255,0,0) 红色
clr.red=255;
}
private:
char id[32+1];
string name;
color clr;
public:
void print();
void getColor(color& ref_clr);
void setColor(color _clr);
};
======
class test
{
public:
int i; //创建时会调用默认的构造函数
};
test t; //栈上创建类对象
test* p1=new test(); //堆上建类
test* p2=new test[100]; //堆上建对象数组
=======
class test
{
public:
test(){i=0;} //i值默认为0
int i; //创建时会调用默认的构造函数
};
=======
class test
{
public:
test(int k){i=k;} //也可以带参数,传给i
int i; //创建时会调用默认的构造函数
};
//调用
test t(5); //栈上创建类对象
test* p1=new test(5); //堆上建类
test* p2=new test[0]; //错误,不支持带参数的构造函数调用
=========
class test
{
public:
test(){i=0;}
test(int k){i=k;} //也以重载
//也可以上两句话合二为一 test(int k=0){i=k;}
int i; //创建时会调用默认的构造函数
};
//传入时根据参数匹配构造参数
test t; //调用test()构造函数
test* p1=new test(5); //调用test(int)构造函数
test* p2=new test[100]; //调用test()构造函数
=========
//利用构造函数的匹配功能,可以加入更多的一些新的特性
class car
{
public:
car() //注意没有void,和类同名
{
//内存清零,设置颜色为(0,0,0)
memset(&clr,0,sizeof(color))
//设置颜色为(255,0,0) 红色
clr.red=255;
}
//通过一个颜色来创建一个车对象
car(color _clr)
{
clr=_clr;
}
//通过三元色来创建
car(unsigned char r,unsigned char g,unsigned char b)
{
clr.red=r;
clr.blue=b;
clr.green=g;
}
private:
char id[32+1];
string name;
color clr;
public:
void print();
void getColor(color& ref_clr);
void setColor(color _clr);
};
=========
//析构函数是在销毁时执行的东东
class test
{
public:
test(int k=0){i=k;}
~test(){} //析构
int i;
};
void fun()
{
test t; //调用构造函数
test* p=new test() //调用构造函数
p.~test(); //手动析构
p=new test();
delete p; //调用析构
test* p2=new test[100]; //调用100次构造
delete [] p2; //调涤100次析构函数
}
=========