【C++基础知识】面向对象基础知识

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


内存四区

代码区

代码区:二进制代码(exe) 特点:共享、只读
全局区:全局变量、静态变量、常量(除了局部变量、局部常量)
栈区:编辑器开辟释放(局部变量、形参)
堆区:程序员分配释放(关键字new将数据开辟到堆区,delete删除)


引用和重载

引用

给变量起别名

数据类型 &别名= 原名;
1.引用必须初始化,且初始化后不可以更改
2.可用于形参修饰实参,进行引用传递
3.引用做函数返回值的话得作为左值
4.引用的本质是指针常量
5.常量引用:const,修饰形参,防止误操作

函数重载

函数名相同,提高复用性
函数重载条件;
1.同一个作用域下
作用域的意思就是有效范围,比如全局作用域(全局可访问),类作用域(类对象可访问),main函数作用域等
2.函数名相同
3.函数参数类型 / 个数 / 顺序不同

p.s.函数返回值不可以作为函数重载条件,即只有返回值类型不同是不行的。
且,注意二义性

对象特性

构造函数和析构函数

构造函数:初始化 ; 析构函数:清理
构造函数:
1.没有返回值,也不用写void
2.函数名与类名相同
3.可以有参数,可以发生函数重载
4.每次创建对象自动调用,且只调用一次
5.不写的话编辑器自动空实现

构造函数析构函数
没有返回值,也不用写void没有返回值,也不用写void
函数名与类名相同函数名与类名相同,名称前加 ~
可以有参数,可以发生函数重载不可以有参数,不可以发生函数重载
每次创建对象自动调用,且只调用一次每次销毁对象自动调用,且只调用一次
不写的话编辑器自动空实现不写的话编辑器自动空实现

class Person
{publlic:
   //构造函数进行初始化
   Person()
   {
      cout<<"Person构造函数调用"<<endl;
   }
   //析构函数进行清理
   ~Person()
   {
      cout<<"Person析构函数调用"<<endl;
   }
}
void test01()
{
   Person p;
}
int main()
{
   
}

只要创建一个类,C++编译器会给每个类都至少添加三个函数:
1.无参构造函数
2.无参析构函数
3.拷贝构造函数

浅拷贝:简单的赋值拷贝
问题:堆区内存重复释放
深拷贝:在堆区重新申请空间,拷贝操作


静态成员

静态成员变量

static
1.所有对象共享一份数据
2.编译阶段分布内存
3.类内声明,类外初始化

即,静态成员变量,不属于某个对象上,所有对象共享一份数据

访问方式:

//1.通过对象进行访问
Person p;
cout<<p.m_A<<endl;
//2.通过类名进行访问
cout<<Person::m_A<<endl;

静态成员函数

1.所有对象共享一个函数
2.静态成员函数只能访问静态成员变量

访问方式:

//1.通过对象进行访问
Person p;
p.func();
//2.通过类名进行访问
Person::func();

p.s.静态成员函数不能访问非静态成员变量

静态成员变量和静态成员函数也有访问权限,即 private 访问不到


运算符重载

(对于全局函数重载,好像可以理解为传参就是重载运算符左右的变量)

加号重载

Person p3 = p1 + p2;

//成员函数重载
Person operator+ (Person &p)
{
   Person temp;
   temp.A = this->A + p.A;
   temp.B = this->B + p.A;
   return temp;
}//Person p3 = p1.operator+(p2);

//全局函数重载
Person operator+ (Person &p1,Person &p2)
{
   Person temp;
   temp.A = p1.A + p2.A;
   temp.B = p2.B + p2.A;
   return temp;
}//Person p3 = operator+ (p1,p1);

左移运算符重载

一般不用成员函数重载实现

osream operator<<(ostream &cout, Person p)
{
   cout = "A="+ p.A +" B="+ p.B;
   return cout;
}//cout<<p<<endl;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值