前言
本文主要介绍了C++中类和对象的基本知识
4.1.1:封装
写一个Circle类,然后分别在栈上和堆上创建两个圆对象,对象包含属性和行为,调用求周长的成员函数,并打印出结果。
4.1.2:封装-访问权限
public | 成员 类内可以访问 类外也可以访问 |
protected | 成员 类内可以访问 类外不能访问,子类可以访问父类的保护内容 |
private | 成员 类内可以访问 类外不能访问,子类不可以访问父类的私有内容 |
4.1.3:struct和class的区别
在C++中struct和class默认的访问权限是不同的。struct默认权限是public,class默认权限private。
C中的结构体不能定义一个函数,C++中可以定义一个函数
C中结构体包含函数定义会报错
C++中的结构体就可以定义函数
4.2.1:构造函数和析构函数
C语言可以通过__attribute__关键字来修饰函数,实现类似C++中构造函数和析构函数的效果,让函数在main函数调用之前和调用之后执行。
构造函数可以有参数,可以发生重载;析构函数不可以有参数,不能发生重载
4.2.2:构造函数的分类和调用(有参构造、无参构造、拷贝构造、括号法、显示法、隐式法)
1:无参构造和有参构造
在创建一个对象时,如果使用默认构造函数时要写成Circle c1,而不要写成Circle c1(),编译器会将 Circle c1()当成一个函数声明,不会执行默认无参的构造函数。
2:普通构造、拷贝构造和括号法
拷贝构造:在创建一个对象的时候传入另外一个对象
3:显示法(通过匿名对象)
匿名对象:当前行结束之后,系统会立即回收掉匿名对象
如果没有给左侧对象赋值:
不要使用拷贝法来创建一个匿名对象
4:隐式法
4.2.3:拷贝函数的调用时机
1:使用一个已经创建完毕的对象来初始化一个新对象
2:值传递的方式给函数的参数传值
如果将参数的类型改成引用,即doWork(Circle &r),那么在传入参数的时候就不会调用拷贝构造函数
对象引用时不会调用构造函数
3:值方式返回局部对象(Linux下好像不太成立)
test函数中中直接调用doWork,在doWork中创建的对象的生存周期只有在本行
doWork的返回值用一个对象进行接收,不会调用拷贝构造函数,但对象的生成周期是函数体执行完毕
打印一下地址发现c1和circle的地址都是一样的,表明只有一个对象
4.2.4:构造函数的调用规则
1:创建一个类,编译器都会至少给每一个类添加默认构造函数、析构函数、拷贝构造函数
2:如果写了有参构造,那么编译器就不会提供无参构造,但依然后拷贝构造;如果写了拷贝构造函数,那么其他构造函数都不会提供
总结
以上就是本文的全部内容,非常感谢你能看到这。