闲聊一下:我感觉我再不总结我就啥也不会了,所以这周好好总结,然后把作业给这做完,重点是这几天太累了,我听到静态函数都睡着了,哎。(主要还是我记忆的东西不超过20分钟就忘,我想学算法了,我的搜索还没写呢)
开始正题:
构造函数:
#include <iostream>
using namespace std;
class Person {
public://千万别忘记函数定义在公共区域。
Person() {
age = 0;
};//无参构造函数
Person(int x) {
age = x;
};//有参构造函数
void Personprintf() {//打印
cout << age << endl;
}
private:
int age;
};
int main()
{
Person* data = new Person(5);//动态申请一个空间
data->Personprintf();
delete data;//释放空间啦
}
初始化列表:
Person(int x) :age(x){}//初始化
注意:(抄费费的)
1.数据成员为常量;数据成员为引用类型。
#include <iostream>
using namespace std;
class A {
public:
A(int i) :x(i), rx(x), Pi(3.14) {};//初始化引用值,初始化Pi
private:
int x;
int℞//引用类型
int Pi;//常量
};
2.数据成员为没有无参构造函数类的对象。
class A {
public :
A(int x) :a(x) {};//有参构造函数
int a;
};
class B {
public:
B(int x, int y) :aa(x), b(y) {};//初始化值
void shuchu() {
cout << aa.a << b << endl;
}
private:
int b;
A aa;//用其他类定义数据成员,很重要
};
初始化的顺序:按类中声明顺序进行初始化,与初始化成员列表的顺序无关。
无参构造函数:什么时候必须要写。
构造函数一般被定义为公有成员。
析构函数:
class Person {
public:
Person() {
age = 0;
};
Person(int x) :age(x) {}//初始化
~Person() {//析构函数定义
cout << "我爱你" << endl;
}
void Personprintf() {//打印
cout << age << endl;
}
private:
int age;
};
一般情况下,可以不定义析构函数(其实我觉得一般情况下,都需要定义,一般都是用指针操作,你开辟了空间,不可能不释放掉吧,那一直占用空间,那不内存越界了吗,反正都要用,不如好好用析构函数)。
利用析构函数中进行存储空间的回收。
this指针
1.非静态成员函数中返回类对象本身或对象的引用的时候,直接使用return *this,返回对象地址时,使用return this.(类本身的引用会比较难理解一点)
2.参数与成员变量名相同时,this->x=x;(这个太简单了,我不想写)
#include <iostream>
#include<string>
using namespace std;
class Person {
public:
Person(string n,int a):name(n),age(a){}
int get_age() {
return age;
}
Person& add_age(int i) {
age += i;
return*this;//引用了原来这个类对象,返回this地址,这个类的地址
}
private:
string name;
int age;
};
int main() {
Person A("A", 20);
cout << A.add_age(1).get_age() << endl;//所以我在返回这个类时再次调用get函数,输出年龄,21
}
静态成员及函数:
1.在类外定义不用static前缀。
2.静态成员函数主要访问同一类中的静态数据成员。
a.可以直接访问静态数据成员。
b.访问非静态数据成员时需要:
通过引用类的方式来访问非静态成员数据。
static void add(Person& s) {//Person为该类
cout << s.age << endl;//age为非静态成员
}
3.私有成员函数不能在类外部或用对象进行访问。
4.可以在建立对象之前处理静态数据成员。
如何初始化静态成员?
int Person::age = 20;//age为静态数据成员,Person为类
5.公有区域的静态成员及函数在主函数中调用方法与其他函数一致
可以直接用类名::(函数名)方式访问,对象访问,指针访问等方式。
常成员:
1.只能初始化列表进行赋值,其他函数不能操作。(使用常对象时必须进行初始化操作)
2.常成员函数不能更新对象的数据,不能调用非const修饰成员函数(静态,构造除外)
3.常对象,不能改变对象的数据成员。
整理的笔记就这些啦,先去把实验题作业写出来!!!