C++入门基础教程:类和对象(上)
Posted Zhi Zhao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++入门基础教程:类和对象(上)相关的知识,希望对你有一定的参考价值。
前言
博主通过对C++基础知识的总结,有望写出深入浅出的C++基础教程专栏,并分享给大家阅读,今后的一段时间我将持续更新C++入门系列博文,想学习C++的朋友可以关注我,希望大家有所收获。
C++面向对象的三大特性为:封装、继承、多态。
1 封装
1.1 基本概述
类的语法:class 类名{ 访问权限:属性/行为 };
实例化: 通过一个类,创建一个对象的过程。
// 封装案例
class student
{
public:
// 属性
string m_Name; // 姓名
int m_ID; // 学号
// 行为
void showstudent()
{
cout << "姓名:" << m_Name << " 学号:" << m_ID << endl;
}
};
// 创建具体的学生,实例化对象
student s1;
// 给s1对象进行属性赋值操作
s1.m_Name = "张三";
s1.m_ID = 1;
类中的属性和行为统称为成员。属性:成员属性或成员变量;行为:成员函数或成员方法。
封装意义:1)在设计类的时候属性和行为写在一起,表现事物;2)在设计类的时候可以把属性和行为放在不同的权限下,加以控制。
1.2 访问权限
访问权限有三种:
1)public 公共权限:成员类内可以访问,类外也可以访问;
2)protected 保护权限:成员类内可以访问,类外不可以访问;
3)private 私有权限:成员类内可以访问,类外不可以访问。
struct和class的区别:默认的访问权限不同。struct 默认为公共权限;class 默认为私有权限。
2 对象特性
2.1 对象的初始化和清理
构造函数:主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用。
析构函数:主要作用在于对象销毁前系统自动调用,执行一些清理工作。
class Person
{
// 1、构造函数:进行初始化操作
// 没有返回值,不用写void
// 函数名与类名相同
// 可以有参数,可以发生重载
// 创建对象的时候会自动调用,且仅调用一次
public:
Person()
{
cout << "Person构造函数的调用" << endl;
}
// 2.析构函数:进行清理的操作
// 没有返回值,不用写void
// 函数名与类名相同,在名称前加~
// 不可以有参数,不可以发生重载
// 对象在销毁前会自动调用,且仅调用一次
~Person()
{
cout << "Person析构函数的调用" << endl;
}
};
// 创建一个对象p
Person p;
2.2 构造函数的分类及调用
分类:按照参数分类(无参、有参);按照类型分类(普通构造、拷贝构造)。
class Person
{
public:
Person()
{
cout << "Person默认(无参)构造函数的调用" << endl;
}
Person(int age)
{
cout << "Person有参构造函数的调用" << endl;
m_Age = age;
}
Person(const Person &p)
{
cout << "Person拷贝构造函数的调用" << endl;
m_Age = p.m_Age;
}
~Person()
{
cout << "Person析构函数的调用" << endl;
}
int m_Age;
};
调用:括号法、显示法、隐式转换法。
// 调用默认(无参)构造函数
void test01()
{
Person p;
}
// 调用有参构造函数
void test02()
{
// 括号法,常用
Person p1(10);
// 显示法
Person p2 = Person(10);
Person p3 = Person(p2);
// 隐式转换法
Person p4 = 10; // 等价于Person p4 = Person(10);
Person p5 = p4; // 等价于Person p5 = Person(p4);
}
2.3 拷贝构造函数的调用时机
#include <iostream>
using namespace std;
class Person
{
public:
Person()
{
cout << "Person默认构造函数的调用" << endl;
}
Person(int age)
{
cout << "Person有参构造函数的调用" << endl;
m_Age = age;
}
Person(const Person &p)
{
cout << "Person拷贝构造函数的调用" << endl;
m_Age = p.m_Age;
}
~Person()
{
cout << "Person析构函数的调用" << endl;
}
int m_Age;
};
// 1)使用一个已经创建完毕的对象来初始化一个新对象
void test01()
{
Person p1(20);
Person p2(p1);
cout << "p2的年龄为:" << p2.m_Age << endl;
}
// 2)值传递的方式给函数参数传值
void dowork1(Person p)
{
}
void test02()
{
Person p;
dowork1(p);
}
// 3)值方式返回局部对象
Person dowork2()
{
Person p1;
return p1;
}
void test03()
{
Person p = dowork2();
}
int main()
{
test01();
test02();
test03();
system("pause");
return 0;
}
2.4 构造函数调用规则
1)创建一个类,C++编译器会给每个类都添加至少3个函数:默认构造函数(空实现)、析构函数(空实现)、拷贝函数(值拷贝);
2)如果写了有参构造函数,编译器就不再提供默认构造函数,但依然会提供拷贝构造函数;
3)如果写了拷贝构造函数,编译器就不再提供普通构造函数。
未完待续,敬请期待下一篇博客:C++入门基础教程(五):类和对象(中)
结束语
大家的点赞和关注是博主最大的动力,博主所有博文中的代码文件都可分享给您(除了少量付费资源),如果您想要获取博文中的完整代码文件,可通过C币或积分下载,没有C币或积分的朋友可在关注、点赞和评论博文后,私信发送您的邮箱,我会在第一时间发送给您。博主后面会有更多的分享,敬请关注哦!
以上是关于C++入门基础教程:类和对象(上)的主要内容,如果未能解决你的问题,请参考以下文章
黑马程序员 C++教程从0到1入门编程笔记5C++核心编程(类和对象——继承多态)