C++周总结:this、指针与成员、const成员函数对象、虚函数 与 多态

C++周总结

一、this指针(返回对象本身,解决重名冲突)

  • 没什么好说的,就是一个指针,引用对象自身的数据,要用 -> 符号获取,比如:
this->age = age;
  • 另外,可以返回this本身对象,实现链式操作
	1. Person& AddPerson(Person p)
	{
    
    
		this->age  += age;
		return *this;
	}
	
	P1.AddPerson(10).AddPreson(10).AddPerson(10);

二、空指针访问成员函数

  • 对象空指针可以访问对象的方法,但是得没有用到this的方法。比如对象里面使用了对象的属性age时候,就相当于是this->age
  • 为了保证健壮性,可以这样:
void ABC()
{
    
    
	if(this == NULL)
	{
    
    
		return;
	}
	cout << name <<endl;
}

三、const修饰成员函数,对象

  • 常函数:
  1. 不能修改成员属性
  2. 但是成员加了mutable就可以了
void ABC() const
{
    
    
	age = 9;//无法修改
}
int age;

但是

相当于 const Person *const this;的第一个const
void ABC()
{
    
    
	age = 9;//就可以改了
}
mutable int age;
  • 常对象
  1. 不能修改对象的值,但是加了mutable就可以了
  2. 常对象只能调用常函数

四、友元(可以访问private)

  1. 全局函数做友元
把函数声明写在类里面
friend void ABC (Person *p);
  1. 类做友元
student是被访问的类
写在主动访问的类里
friend class student;
  1. 成员函数做友元
//告诉编译器  goodGay类中的visit成员函数 
//是此类的好朋友,可以访问私有内容
	friend void goodGay::visit();

三、重载运算符

//在类里面
Person operator+(const Person &p)
{
    
    }
//在类外
Person operator+(const Person &p1, const Person &p2)
{
    
    }
//
//重载左移运算符,一般在全局函数使用
ostream& operator << (otream& cout, Person &p)
{
    
    
	return cout;//链式编程思想
}
//

虚函数、抽象类

  • 有了纯虚函数就是抽象类,
  • 抽象类不能实例化
  • 子类必须重写纯虚函数(重写的时候也写了virtual。如果类里面写的声明,实现时候就不用写virtual)

用的多态,父类指针或引用指向子类对象
在这里插入图片描述

虚析构

  • 如果 类 里面在堆区开辟了空间,需要手动析构
  • 子类开辟了堆区空间,父类指针不会调用到子类的虚构函数,把父类的虚构写成虚析构
    在这里插入图片描述

纯虚析构

  • 父类的纯虚析构要单独实现
  • 实现时候不用写virtual
    在这里插入图片描述

虚函数与多态

当类里面的虚函数时,编译器会自己产生一个虚函数表指针(vptr),里面指向一个虚函数表,表里面记录函数指针。

猜你喜欢

转载自blog.csdn.net/foolbirdM/article/details/120979912