C++中的类,是由C++中的结构体演变而来的,C++中的类和结构体都是可以继承的,类中成员都默认是私有权限private类:就是一个对象的模板,类中会包含,成员属性,成员方法(行为)。对象:实例化出的类对象。
this指针是一个类内默认给非静态成员函数提供的,指向类对象的指针类对象的指针----->哪个对象使用我,我就指向哪个对象。指向类对象,类名*constthis ----->可以通过指针改变数值,但是不能指针的指向。当成员函数中的形参和成员属性,同名时,使用this指针区分成员属性,当构造函数的形参和成员属性同名。
构造函数当实例化类对象时,给类对象初始化空间。栈区:实例化类对象时,自动调用构造函数
堆区:定义类指针时,不调用构造函数,在使用new申请空间时才调用构造函数。
析构函数释放类对象的空间。栈区:类对象消亡后,主动调用。堆区:何时delete何时调用
先构造的后析构,后构造的先析构。只要显性定义了析构函数,系统不会再提供默认的析构。
拷贝构造函数用已有的类对象给另一个类对象初始化时,使用的,系统自动调用。
1.使用已有的类对象初始化新的类对象时
2.类对象作为函数参数时,也会调用拷贝构造函数,而不是类对象的引用作为函数的参数,因为引用作为参数,不会开辟空间,
3.类对象作为函数的返回值
习题:
#include <iostream>
#include <cstring>
using namespace std;
class Stu
{
public:
string name;
int age;
int score;
int *high;
public:
Stu ()
{
cout << "无参构造函数"<<endl;
this->high = new int;
this->name = new char[10];
}
~Stu()
{
cout << "调用析构函数"<<endl;
delete high;
}
Stu (Stu &s):name(s.name),age(s.age),score(s.score)
{
cout << "调用拷贝函数" << endl;
this->high = new int;
*(this->high) = *(s.high);
}
void show();
};
void Stu::show()
{
cout << "姓名 :" << name << endl;
cout << "年龄 :" << age << endl;
cout << "分数 :" << score << endl;
cout << "身高 :" << *high << endl;
}
int main()
{
Stu s1;
s1.age=99;
* s1.high=199;
s1.name="zhangsan";
s1.score=66;
s1.show();
Stu s2=s1;
s2.show();
return 0;
}