对于类而言也可以视为一种数据类型,因此,动态内存分配对类同样使用。如下:
#include <iostream>
struct Dog{
int age = 2;
void call(){
std::cout << "汪汪汪" << std::endl;
}
};
int main(){
Dog* dog = new Dog;
dog->call();
delete dog;
return 0;
}
通过上述方法,创建一个Dog类的指针,通过这个指针进行动态内存分配,因为是堆区内存所以需要手动申请和手动释放。
如果是一个普通的类对象,调用其属性和方法(即行为)时是通过“.”的方式来调用的。但是如果是通过类的指针调用则需要通过“->”的方式来调用。
在C++中除了可以使用struct关键字外更多的使用的是class的关键字,如果是使用class的话就需要额外的一些操作,如下:
#include <iostream>
class Dog{
int age = 2;
void call(){
std::cout << "汪汪汪" << std::endl;
}
};
int main(){
Dog* dog = new Dog;
dog->call();
delete dog;
return 0;
}
如上,将最开始的代码中的struct关键字改为class关键字,此时如果直接调用其属性或者方法就会报错。
这是因为在C++的类中,还存在着属性,类中存在3个属性,如下:
属性 | 类别 |
---|---|
public | 公有属性,可以在类外访问 |
private | 私有属性,无法在类外访问 |
protected | 保护属性,无法在类外访问 |
具体的使用格式如下:
#include <iostream>
class Animals{
private:
int num1 = 1;
protected:
int num2 = 2;
public:
int num3 = 3;
};
int main(){
Animals animal;
std::cout << animal.num3 << std::endl;
return 0;
}
通常情况下,我们设计出来的类并不希望在别人使用的时候可以随意修改我们的属性,所以,通常情况下私有属性和保护属性中写的是变量,在共有属性中写的是函数即方法。