1.基础语法
class 类名
{
访问权限:
属性/行为
};
访问权限有三种:
1.public 公共权限(类内可以访问,类外也可以访问)
2.protected 保护权限(类内可以访问,类外不可以访问)
3.private 私有权限(类内可以访问,类外不可以访问)
注:
protected 保护权限和private 私有权限的区别在如果有父类的话:
子类可以访问父类中protected的内容,
但不可以访问父类中private的内容
例:
#include<iostream>
#define PI 3.14
using namespace std;
//设计一个圆类,求圆的周长
//class代表一个类,类后为类的名字
class Circle
{
//访问权限
public:
//属性
//半径
int m_r;
//行为
// 获得圆的周长
double Circle_C()
{
return 2*PI*m_r;
}
};
int main()
{
//通过圆类,创建具体的圆
Circle c1;
//给圆对象的属性进行赋值
c1.m_r = 10;
cout<<"圆的周长: "<<c1.Circle_C()<<endl;
}
2.struct和class区别
在c++中 struct和class唯一区别在默认的访问权限不同
struct 默认权限为公共
class 默认权限为私有
例如:
#include<iostream>
using namespace std;
class C1
{
int m_A; //默认是私有权限
};
struct C2
{
int m_B; //默认是公共权限
};
int main()
{
C1 a;
// a.m_A = 10; 报错,因为类默认是私有权限
C2 b;
b.m_B = 10;
}
3.构造函数丶析构函数和拷贝函数及调用方法
c++利用构造函数和析构函数解决了对象的初始化和清理,这两个函数将会被编译器自动调用,完成对象的初始化和清理,因此如果我们不提供构造函数和析构函数,编译器会自动生成,但生成的函数为空函数.
构造函数:主要作用于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用.
析构函数:主要作用在于对象销毁前系统自动调用,执行一些清理工作
构造函数语法:类名(){}
- 构造函数没有返回值也可以不写void
- 函数名称与类名相同
- 构造函数可以有参数,因此可以发生重载
- 程序在调用对象时候会自动调用构建,编译器会自动调用,无须手动调用.且自会调用一次
#include<iostream>
using namespace std;
class Person
{
public:
Person()//无参
{
cout<<"构造函数的无参调用"<<endl;
}
Person(int a)//有参
{
age = a;
cout<<"构造函数的有参调用"<<endl;
}
Person (const Person&p) //拷贝
{
//将别人身上的属性传递到自己身上
age = p.age;
cout<<"拷贝构造函数的调用"<<endl;
}
int age;
};
int main()
{
//三种调用方法
//一
Person p1; //构造函数的无参调用
Person p2(10); //构造函数的有参调用
Person p3(p2);//拷贝构造函数的调用
cout<<"p2: "<<p2.age<<endl;
cout<<"p3: "<<p3.age<<endl;
//二
Person p2 = Person (10);
Person p3 = Person (p2);
//三
Person p2 = 10;
Person p3 = p2;
}
析构函数语法:~类名(){}
- 析构函数没有返回值也可以不写void
- 函数名称与类名相同,在名称前面加上符号~
- 构造函数不可以有参数,因此不可以发生重载
- 程序在调用对象销毁前,编译器会自动调用,无须手动调用.且自会调用一次
#include<iostream>
using namespace std;
class Person
{
public:
~Person()
{
cout<<"析构函数的调用"<<endl;
}
};
int main()
{
Person p1; //析构函数的无参调用
}
4.this指针概念
this指针指向被调用的成员函数所属的对象
this指针式隐含每一个非静态成员函数内的一种指针 this指针不需要定义,直接使用即可
this指针的用途
当形参和成员变量同名时,可以用this指针来区分
在类的非静态成员函数中返回对象本身,可以用return *this
#include<iostream>
using namespace std;
class Person
{
public:
//解决名称冲突
Person(int age)
{
//这里的this代表的含义是,下面定义的p中的age
this->age = age;
cout<<age<<endl;
}
void PersonAddAge(Person &p)
{
this->age += p.age;
}
public:
int age ;
};
int main()
{
Person p(10);
Person p1(10);
p1.PersonAddAge(p);
cout<<p1.age<<endl;
}
5.友元
在程序里,有些私有属性,也想让类外特殊的一些函数或者类经行访问,就需要利用友元的技术.
友元的目的就是让一个函数或者类 访问另一个类中的私有成员
友元的三种实现
- 全局函数做友元
- 类做友元
- 成员函数做友元
#include<iostream>
#include<cstring>
using namespace std;
class Builbing
{
//友元
friend void visit(Builbing &b);
public:
Builbing()
{
m_SittingRoom = "客厅";
m_BedRoom = "卧室";
}
public:
string m_SittingRoom; //客厅
private:
string m_BedRoom; //卧室
};
//全局函数做友元
void visit(Builbing &b)
{
cout<<b.m_SittingRoom<<endl;
//可以访问类中的私有成员
cout<<b.m_BedRoom<<endl;
}
int main()
{
Builbing b;
visit(b);
}