【一】string类
string s1;
s1=“Hello”;
cout<<s1<<endl;
s1=s1+"world";
cout<<s1<<endl;
string s2;
cout<<s2.size()<<endl;
cout<<s2.empty<<endl;
域运算符::
这是作用域,如果想在类的外部引用静态成员函数,或在类的外部定义成员函数都要用到。使用命名空间里的类型或函数也要用到(如:std::cout, std::cin, std::string 等等)
class Test
{
public: Test();
static void print()
{ std::cout<<"Test"<<endl; //命名空间时使用:: }
private:
int a; };
Test::Test() : a(1) //定义时使用::
{}
Test::get(); //使用静态成员函数时用::
C++中的private, public, protected
1.在 private 访问说明符下定义的成员只能在同一个类中访问,它们在派生类或程序的任何其他类中是不可访问的。
类用于指定对象的形式,它包含了数据和用于处理数据的方法,可以把类当作自定义的数据类型
2.访问权限:
默认访问权限private
(1)public公有权限:一个类的public成员变量,成员函数,可以通过类的成员函数,类的实例变量进行访问
(2)protecte保护权限,一个类的protected成员变量,成员函数,无法通过类的实例变量进行访问
可以通过公有函数接口与友元函数,友元类进行访问。
(3)private私有权限:一个类的private成员变量,成员函数,无法通过类的实例变量进行直接访问
可以通过公有函数接口与友元函数,友元类进行访问。
对象:实例化一个事物,成为某个具体事物的一个个体,创建对象后才会分配具体内存空间
3.创建方式:
静态创建 Human perso;
动态创建Human *perso=new Human;
4.访问属性及方法
针对非指针类型创建的对象
针对指针类型创建的对象
构造函数
1.默认构造函数
如果没有人为实现默认构造函数,那么可以理解为编译器会自动生成一个默认构造函数
当使用无参构造函数静态创建一个对象的时候,不能添加小括号,编译器默认此为函数声明。
2.构造函数的重载
3.初始化列表(使用:符号)
在初始化时,也可以使用初始化列表的方式来实现构造函数,一般用在继承中
4.拷贝构造函数
(1)当一个对象需要通过另一个对象初始化,则需要使用拷贝构造函数
(2)什么时候调用拷贝构造函数
主动创建对象时,用一个对象去初始化另一个对象的时候
一个对象以值传递的形式传入函数体
一个对象以值的形式从函数返回
(3)注意事项
编译器默认生成的拷贝构造函数为浅拷贝
如果实现了拷贝构造函数,那么编译器不会生成默认构造函数,反之如果实现了默认构造函数,那么编译器还是会生成一个默认拷贝构造函数
const关键字可以省略,但是引用&不能省略,原因在于如果省略,那么形参接受值传递时发生拷贝构造,导致死循环
关于指针,因此除非与new一起使用,否则将不会调用任何构造函数
(4)浅拷贝与深拷贝
浅拷贝:默认拷贝构造函数为浅拷贝
浅拷贝对指针类型变量,仅拷贝对应内存地址,不会新开辟内存地址空间
深拷贝:人为重载拷贝构造函数,新开辟一段内存空间
(5)explicit
含义:(1)explict关键字只能用来修饰类的构造函数,且最好只修饰只有一个参数的构造函数
(2)被修饰的构造函数不能发生相应的隐式类型转换,只能以显式的方式进行类型转换
隐式拷贝构造函数
(1)一个对象作为函数参数,以值传递的方式传入函数体
(2)一个对象作为函数返回值,以值传递的方式从函数返回
(3)以A a=b的方式构造a,其中b也是A类型
(4)拷贝构造函数一般不会设计成禁止隐式转化
析构函数
在销毁对象时自动调用此函数,往往用来释放对象之内申请的资源
定义:与类名相同,在前面加取反符~。且不能有任何参数和返回值
特点:
(1)没有参数没有返回值,但有this指针
(2)析构函数不能用const修饰
(3)一个类有且只有一个析构函数,所以肯定不能重载
(4)如果不手动销毁对象指针,程序运行结束时,编译器将不会进行处理,操作系统会之间进行内存回收,因此不会调用析构函数