1.面向对象
1.1 定义
面向对象编程是一种程序设计方法,它将数据和操作数据的方法封装在一起,形成类。类是一种用户自定义的数据类型,它包含了数据和对数据的操作方法。面向对象编程的特点包括封装、继承、多态
1.2 访问控制符
· public 公有属性,方法。都可以访问
· protected 只能自己和子类访问
· private 只能自己访问
#include <iostream>
#include <string>
using namespace std;
class Test
{
public:string name;int age;void show_name(){cout << name << endl;};
};int main()
{Test t;t.name = "Tom";t.age = 10;t.show_name();return 0;
}
1.3 构造函数
构造函数是特殊的成员函数,在对象创建时自动调用,用于初始化对象的状态
Person(int a){} — 类名(参数列表){函数体}
特点如下:
· 构造函数无返回值,也不需要加void,构造函数没有函数类型。
· 构造函数的函数名称要与类名一致
· 构造函数具有形参列表,并可以发生函数重载
· 编译器会自动调用构造函数,无需手动调用,并且只调用一次
#include <iostream>
#include <string>using namespace std;class Test
{
public:Test(){cout << " first test " << endl;}Test(int a){cout << " test a : " << a << endl;}};// 根据参数的不同,调用不同的构造函数
int main()
{Test t;Test ta(1);return 0;
}
//输出结果
//first test
//test a : 1
1.4 构造函数初始化列表
· 没使用初始化列表的构造函数,初始化成员变量会先调用默认构造函数,然后再赋值。
而参数列表初始化则避免了这种情况,直接通过初始化列表进行初始化,从而提高了效率。
· const成员和引用类型的成员(&)必须在初始化列表中初始化,因为它们不能在构造函数体内赋值。
· 如果成员是一个类类型对象,那么使用初始化列表可以直接调用其构造函数进行初始化,而不是先调用默认构造函数再进行赋值。
1.4.1基本示例
class Test
{
public:Test(int a, int b): num1(a), num2(b){cout << " num1的初始化值为a, num2的初始化值为b " << endl;}
private:int num1;int num2;
};
1.4.2 const 成员和引用成员 示例
class Test
{
public:Test(int a, int b): num1(a), num2(b){cout << "构造函数初始化" << endl;}
private:const int num1;int & num2;
};
1.4.3
class A
{
public:A(int a){cout << " a : "