1、类对象作为类成员
C++类中的成员可以是另一个类的对象,我们称该成员为 对象成员
class A{}
class B{
A a;
}
这个例子中,类B中有 类A的实例化对象 作为成员,我们称 A为对象成员。
在构造的时候,先是 对象成员类A构造,再是类B构造;
在析构的时候,先是 类B析构,再是 对象成员类A析构。
2、静态成员函数static
所有这个类的对象都共有同一个静态成员函数
class Person{
public:
static int m_A;
int m_B;
static void func(){
m_A = 100; //静态成员函数只能访问静态成员变量
//m_B = 10; //不可调用非static的属性,因为它在不同实例中会有不同的值
}
}
只有 非静态成员变量 才属于类的对象上
3、this指针
this指针指向被调用的成员函数所属的对象。this指针是隐含每一个非静态成员函数内的指针,所以,无需定义,直接使用。
指针的本质就是指向本对象的指针常数。
class Person{
public:
int age;
Person(int age){
this->age = age;//当形参和成员变量同名的时候,可以使用this指针来区分
}
Person& PersonAddPerson(Person p{
this->age +=p.age;
return *this;
//使用 *this 来返回对象本身,函数想要更改,需是一个引用,不然只会是一份拷贝
})
}
4、空指针访问成员函数
一个空指针也能访问成员函数,但不可以访问成员变量嗷。
class Person{
public:
int age;
void ShowClassName(){
cout << "this is Person class." << endl;
}
void ShowPersonAge(){
if(this == NULL){
reutrn;
}
cout << age;
}
}
void test01(){
Person * p =NULL; //创建一个Person类的空指针,没有创建实例
p->ShowClassName(); //可以调用,即使是个空指针,也可以调用
//p->ShowPersonAge(); //如果没有那个 if语句 ,则会报错,因为没有真正的创建一个对象、age的值没有被创造。
}
5、const修饰成员函数
常函数:
- 成员函数加 const
修饰,放在参数列表后,我们称之为常函数。
- 常函数内不可以修改成员属性
- 成员属性声明时加关键字 mutable
以后,就可以在常函数中修改了
常对象:
- 声明对象前加const称该对象为常对象
- 常对象只能调用常函数
6、友元
使用 friend
关键字,来让一些函数可以访问 privite 成员
全局函数做友元:friend void GoodGay();
类做友元:friend class A
成员函数做友元:friend void GoodGay::visit();