在设计类的时候,属性和行为写在一起,表现事物
类在设计时,可以把属性和行为放在不同的权限下,加以控制。
public 公共
类内 类外都可以访问,
protected保护
类内可以访问 类外不可以访问 儿子可以访问父亲中的保护内容
private 私有
类内可以访问 类外不可以访问 儿子不可以访问父亲中的保护内容
在C++中struct和class的唯一区别就在于默认访问权限不同
struct默认权限为公共 class默认权限为私有
成员属性设置为私有:可以自己控制读写权限;可以通过设置一些公共的接口来进行访问私有属性
对于写可以检测数据的有效性
在public的接口函数里判断 如设置年龄的函数里对年龄小于0大于200的进行检查
对象的初始化和清理是两个非常重要的安全问题。
? 一个对象或者变量没有初始状态,对其使用后果是未知的。
? 使用完一个对象或变量,没有及时清理,也会造成一定的安全问题。
构造函数:主要作用在创建对象时为对象的成员属性赋值,构造函数有编译器自动调用,无需手动调用。
类名(){}
构造函数,没有返回值,也不写void
函数名称与类名相同
构造函数可以有参数,因此可以发生重载
程序在调用对象时会自动调用构造,无需手动调用,且只会调用一次
析构函数:主要作用在于对象销毁前系统自动调用,执行一些清理工作。
~类名(){}
析构函数,没有返回值,也不写void
函数名称与类名相同,在名称前加上符号 ~
析构函数不可以有参数,因此不可以发生重载
程序在对象销毁前会自动调用析构函数,无需手动调用,且只会调用一次
构造和析构都是必须有的实现,如果我们自己不提供,编译器会提供一个空实现的构造和析构
按参数分为:有参构造和无参构造
按类型分为:普通构造和拷贝构造
Person(const Person &p)
{
age=p.age;
}
Person p1;//默认构造函数调用
Person p2(10);//有参构造函数
Person p3(p2);//拷贝构造函数
注意事项:
调用默认构造函数时候不要加(),如Person p1()编译器会认为是一个函数的声明
Person p1;
Person p2=Person (10);//有参构造
Person p3=Person(p2);//拷贝构造
等号右边如Person (10)单独拎出来叫做匿名对象 特点:当前行执行完后系统自动回收匿名对象
注意事项二:不要利用拷贝构造函数初始化匿名对象 编译器会认为 Person(p3)===Person p3,但是p3在Person p3(p2);中已经定义过了
如:Person(p3);
Person p4=10;//相当于写了Person p4 = Person(10);调用了有参构造
Person p5=p4//拷贝构造