C++:类

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

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

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

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

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

3.深拷贝和浅拷贝

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

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

浅拷贝的问题:

C++:类_第1张图片

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

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

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

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

6.静态成员:

1)静态成员变量:

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

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

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

2)静态成员函数:

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

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

7.C++对象和this

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

class Person
{


}

int main
{
  Person p;
  cout<<"size of ="<

结果是:

(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<

(2)类做友元

(3)成员函数做友元

C++:类_第2张图片

 

暂未整理

你可能感兴趣的:(公共-C/C++语法,c++,开发语言)