记录一:
类是 C++ 的核心特性,通常被称为用户定义的类型。
定义一个类,本质上是定义一个数据类型的蓝图,这实际上并没有定义任何数据,只有在实例化一个类的时候才会分配内存。
记录二:
C++类实例化的两种方法:
先定义一个类:
class cc
{
public:
int a;
int b;
};
void main()
{
cc o[3]; //栈上;直接声明并调用构造函数 ;单个就直接 cc o;
0[1].a=10;
cc *p=new cc[3]; //堆中;使用指针创建,程序运行完毕后必须释放内存
p[0].a=10;
p->b=10;
delete []p;
p=NULL;
}
1.在栈上实例化一个对象数组
cc o[3]; 类名+数组的名称+数组的大小,创建完成后每一个数组元素都可以访问各自的成员,例如用o[1]来访问数组的第二个元素,后面接点号来访问数据成员,形如o[1].a=10;这里使用完后内存是自动销毁的。
2.在堆中实例化一个对象数组
cc *p=new cc[3]; 用一个指针指向一段内存,开辟内存用new运算符,这里数组大小为3,则创建时会调用三次构造函数。创建完成后每一个数组元素都可以访问各自的成员,例如p[0].a=10; 是通过指针接一个索引再加点号和数据成员访问的,也可以通过p->b=10;来进行赋值。在这里使用完后,必须要通过delete来销毁这个对象数组,由于是一个对象数组,所以在销毁的时候是调用了多次析构函数的。
3.在C++中,new运算符是用于开辟内存,例如开辟一段内存空间用于存放一个数组的每个对象,不仅仅是实例化类使用的。
补充:实例化有参数的情况:
class C {
public:
C(string s = "", int i = 0, double d = 1.0) {
dataMember1 = s;
dataMember2 = i;
dataMember3 = d;
}
void memberFunction1() {
cout << dataMember1 <<" "<< dataMember2 << '" "<< dataMember3 << endl;
}
protected:
string dataMember1;
int dataMember2;
double dataMember3;
};
int main() {
//创建类实例方法1:直接声明并调用构造函数 ;带参数的;
C obj1("o1", 11, 111);
obj1.memberFunction1();
return 0;
}
完毕。
网友评论