C++:类

1.默认情况下,编译器会给类至少添加3个构造函数

1)默认构造函数(无参,函数体为空)

2)默认析构参数(无参,函数体为空)

3)默认拷贝构造函数,为所有的属性进行值拷贝。

2.如果我们提供了有参构造函数,编译器不再提供默认构造,但是会提供拷贝构造函数。

3.深拷贝和浅拷贝

1)浅拷贝:默认拷贝构造函数,简单的赋值拷贝。

2)深拷贝:自己实现拷贝构造函数,重新申请堆区空间,进行拷贝操作。防止空间重复释放的问题。析构要配合释放堆区内存。

浅拷贝的问题:

注意:如果成员中有堆区操作,要自己实现拷贝构造函数。

4.初始化列表:用来初始化属性

1)目前觉得用途不大, 以后再看。

5.当其他类对象作为本类成员时,先调用成员类的构造函数,再构造自身;析构的时候相反。

6.静态成员:

1)静态成员变量:

(1)所有对象同共享同一份数据;

(2)在编译阶段分配内存

(3)类内声明,类外初始化。

2)静态成员函数:

(1)所有对象共享同一个函数。可以通过对象,也可以通过类名。

(2)静态成员函数只能访问静态成员变量。

7.C++对象和this

1)成员变量和成员函数是分开存储的。只有非静态成员变量属于类对象。

class Person
{


}

int main
{
  Person p;
  cout<<"size of ="<<sizeof(p)<<endl;
}

结果是:

(1)1。空对象的结果是1,C++编译器会给每一个空对象分配一个字节空间,是为了区分空对象占内存的位置。

2)this指针

每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码。那么问题是:这一块代码是如何区分哪个对象调用自己的?

C+++通过提供特殊的对象指针,this指针,解决上述问题。this指针指向被调用的成员函数所属的对象。

this指针是隐含每一个非静态成员函数内的一种指针

this指针不需要定义,直接使用即可。

this指针的用途:

(1)当形参和成员变量同名时,可以用this指针来区分;名称冲突问题。

(2)在类的非静态成员函数中返回对象本身,可使用return *this;

8.空指针访问成员函数

9.const修饰成员函数

常函数:

1)成员函数后加const后,我们称这个函数为常函数;

2)常函数内不可以修改成员属性;修饰的时this指向,让指针指向的值也不可以修改。

3)成员属性声明时加关键字mutable后,在常函数中依然可以修改;

常对象:

1)声明对象前加const称该对象为常对象;

2)常对象只能调用常函数

3)成员属性声明时加关键字mutable后,在常对象中依然可以修改;

class Person
{
public:
    void showPerson() const
   {
      m_A=100;//等价于  const Persong * const this ->m_A ,这是不能修改的
      m_B=100;//因为成员加了mutable ,可以修改。
   }
   int m_A;
   mutable int m_B;
};

10.友元

1)友元的三种实现

(1)全局函数做友元。将全局函数放在类里。头部加friend。可以访问私有

class Person
{
friend void test(Person &p);
private:
   int m_A;
};
void test(Person &p)
{
   cout<<p.m_A<<endl;
}

(2)类做友元

(3)成员函数做友元

 

暂未整理

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙八瓶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值