c++(六)
c++面向对象的三大特性:封装、继承、多态
c++认为万事万物都皆为对象,对象上有其属性和行为

类的属性和行为,我们统一称为 成员
属性也叫成员属性或成员变量
行为也叫成员函数或者成员方法
public 成员 在类内可以访问到,在类外也可以访问到
protected 成员 在类内可以访问到,在类外不可以访问到 儿子可以访问父亲中的保护内容
private 成员 在类内可以访问到,在类外不可以访问到 儿子不可以访问父亲的私有内容
class Person{
public:
string m_Name;
protected:
string m_Car;
private:
int m_Password;
public:
void func()
{
m_Name="张三";
m_Car=“拖拉机”;
m_Password=123456;(类内都可以访问)
}
};
int main()
{
Person p1;
p1.m_Name="李四";
p1.m_Car="宝马"; (报错)
}
struct和class的区别
在c++中struct和class的唯一区别就在于默认的访问权限不同,struct默认权限为公共,二class默认权限为私有

对于写 可以检测数据的有效性
利用成员函数判断两个立方体是否相等
如果主函数中调用成员函数判断的话,先有一个对象调用这个函数才可以,那么在class的成员函数中设置bool isSameByClass(Club &c)只需要一个形参 { if(m_L==c.getL() && m_W== c.getW() && m_H==c.getH() ) { return true;} return false;}
构造函数和析构函数
构造函数和析构函数将会被编译器自动调用,完成对象初始化和清理工作。
对象的初始化和清理工作是编译器强制要我们做的事情,如果我们不提供构造函数和析构函数,编译器会提供,编译器提供的构造和析构函数是空实现。
构造函数:主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无需手动调用
析构函数:主要作用在于对象销毁前系统自动调用,执行一些清理工作
构造函数语法:类名(){}
1.构造函数,没有返回值也不写void
2.函数名称与类名相同
3.构造函数可以有参数,因此可以发生重载
4.程序在调用对象时候会自动调用构造,无需手动,而且只会调用一次
析构函数语法:~类名(){}
1.析构函数,没有返回值也不写void
2.函数名称与类名相同,在名称前加上符号~
3.析构函数不可以有参数,因此不可以发生重载
4.程序在对象销毁前会自动调用析构,无需手动,而且只会调用一次
构造函数的两种分类方式:
按参数分为:有参构造和无参构造
按类型分为:普通构造和拷贝构造
三种调用方式:
括号法
显示法
隐式转换法
//拷贝构造函数
	Person(const Person &p )//加const是因为不能把本身修改掉,拷贝的同时要用引用的方式传进去
	{
		//将传入的人身上的所有属性,拷贝到我身上
		age = p.age;
		cout << "拷贝构造函数的调用" << endl;
	}
void test01()
{
	Person p;//调用对象时自动调用构造函数,等到test01()执行结束之后,释放这个对象;(默认构造函数的调用,不要加小括号())
	//括号法
	Person p2(10);//有参构造函数的调用
	Person p3(p2);//括号法调用拷贝构造函数
	//显示法
	Person p4;//默认构造函数
	Person p5 = Person(10);//有参构造函数
	Person p6 = Person(p5);//拷贝构造函数
	Person(10);//匿名对象,单独拿出来没有名字,上方的p5是它的名字
	           //特点:当前行执行结束后,系统会立即回收掉匿名对象
	           //不要利用拷贝构造函数 初始化匿名对象    Person(p3);这样是不对的,编译器会认为是对象声明
	//隐式转化法
	Person p7 = 10;//相当于 写了 Person p4 = Person(10);
	Person p5 = p4;//拷贝构造
}
拷贝构造函数调用时机
1. 使用一个已经创建完毕的对象来初始化一个新对象 Person p2(p1);
2.值传递的方式给函数参数传值,值传递相当于Person p=p 是拷贝构造函数的隐式写法 : void doWork(Person p) { } void test01(){ Person p; doWork(p)};
3.值方式返回局部对象Person doWok2() {Person p1; return p1;} void test03(){ Person p=doWork2()}调用了拷贝构造函数,实际上不会返回p1.拷贝p1返回新对象
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号