C/C++基础语法复习(二):C++ 面向对象编程,你需要知道的点
a.定义:
类定义是以关键字 class 开头,后跟类的名称。类的主体是包含在一对花括号中。类定义后必须跟着一个分号或一个声明列表。
关键字 public 确定了类成员的访问属性。在类对象作用域内,公共成员在类的外部是可访问的。您也可以指定类的成员为 private 或 protected,私有的成员和受保护的成员不能使用直接成员访问运算符 (.) 来直接访问。
类提供了对象的蓝图,所以基本上,对象是根据类来创建的。声明类的对象,就像声明基本类型的变量一样:
Box Box1;
Box Box2; //定义了两个box类的对象
b.类成员函数:
https://www.runoob.com/cplusplus/cpp-class-member-functions.html
注意C++的namespace概念
c.类访问修饰符:
数据封装是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员。类成员的访问限制是通过在类主体内部对各个区域标记public、private、protected 来指定的。
成员和类的默认访问修饰符是 private。
(1). 公有(public)成员:
在程序中类的外部是可访问的。您可以不使用任何成员函数来设置和获取公有变量的值 :
line.length=10.0; //line是对象,length是public的成员变量,直接赋值不用成员函数。
(2). 私有(private)成员:
私有成员变量或函数在类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员。
默认情况下,类的所有成员都是私有的。私有成员只能通过成员函数访问:
box.setWidth(10.0);
(3). 保护(protected)成员:
保护成员变量或函数与私有成员十分相似,但有一点不同,保护成员在派生类(即子类)中是可访问的。
(4) 继承中的特点:
1.public 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:public, protected, private
2.protected 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:protected, protected, private。 (protected 成员可以被派生类访问。)
3.private 继承:基类
public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:private, private,
private。 (private 成员只能被本类成员(类内)和友元访问,不能被派生类访问)
d.继承:
面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。
例子:
classRectangle:publicShape // Shape是基类(父)。Rectangle是派生类(子类)
关于成员函数的继承见上一项。
显而易见,子类定义的成员函数和成员变量不能被父类使用,但是父类和成员函数和成员变量都根据情况可以被子类使用。
注:可以多重继承(一个子类可以有好几个父类,嘿嘿)
e.类构造函数:
类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。
默认的构造函数没有任何参数,但如果需要,构造函数也可以带有参数。这样在创建对象时就会给对象赋初始值.
Line::Line(doublelen)
{
cout<<"Object is being created, length ="<//一般就是设定个初始值,比如 a = len;
length=len;
}
Sub:C++ 初始化类成员时,是按照声明的顺序初始化的,而不是按照出现在初始化列表中的顺序。所以说最好按照顺序声明。
f. 析构函数:
类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。
析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。
Line::~Line(void)
{
cout<<"Object is being deleted"< //一般不是这种,一般都是释放内存或者关闭文件之类的指令(delete 或者 close)
}
g.拷贝构造函数:
拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象
如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数。
https://www.runoob.com/cplusplus/cpp-copy-constructor.html
h.友元函数:
类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。
友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。
如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend。
i.静态成员:
我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。
静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化.
静态成员函数:
如果把函数成员声明为静态的,就可以把函数与类的任何特定对象独立开来。静态成员函数即使在类对象不存在的情况下也能被调用,静态函数只要使用类名加范围解析运算符::就可以访问。
静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数。
静态成员函数有一个类范围,他们不能访问类的 this 指针。您可以使用静态成员函数来判断类的某些对象是否已被创建。
引用:https://www.runoob.com/cplusplus/cpp-classes-objects.html;http://c.biancheng.net/view/2201.html
——————————————————————————————————————————————————————
学习C/C++编程知识,如果你感觉自学的时候有困难,可以跟我们一起来交流讨论,C/C++编程,点击即可。
C/C++基础语法复习(二):C++ 面向对象编程,你需要知道的点相关推荐
- python基础语法复习[二] 函数、类
python基础语法复习[二] 前言 一.函数 1.基本概念 2.一般实例 3.参数传递 (1)传不可变对象 (2)传可变对象 4.函数递归调用实例 (1)eg:实现字符串的反转: (2)递归思想画树 ...
- java基础语法(二)--单列模式
java基础语法(二)--单列模式 /*** 功能:单列模式* @author Administrator**/ public class SingletonTest {public static v ...
- python基础语法(二)列表
往期推荐: python基础语法(一)range函数 python基础语法(二)列表 前言 一.列表的创建与删除 二.列表的查询操作 1. 获取列表中指定元素的索引 2. 获取列表中的单个元素 3. ...
- Java基础语法(二)——数据类型
文章目录 Java基础语法(二)--数据类型 一.int 整型类型 1.基本语法格式 2.数值范围 3.未定义时变量的默认初始值 4.注意事项 二. long 长整型类型 1.基本语法格式 2.数值范 ...
- Java基础学习——第六章 面向对象编程(下)
Java基础学习--第六章 面向对象编程(下) 一.关键词:static 1. static关键字的引入 当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new ...
- 编程类-----matlab基础语法复习(1)
2019年美赛随笔记录: 具体功能:基础语法+基本运算+画图+矩阵+excel读取....... 所遇问题及其解决方案: 1. que:matlab中plot画图无法复制下来图片? ...
- python设计一个函数定义计算并返回n价调和函数_音乐编程语言musicpy教程(第三期) musicpy的基础语法(二)...
这个是我在github上给我的项目musicpy写的wiki,分为数据结构,基础语法,实际应用三大部分来为大家讲解这门音乐编程语言,主要是想给大家写一个musicpy的详细的教程与介绍,目前wiki只 ...
- C/C++基础语法复习(一):C++与C语言的区别,主要有这些!
和C的区别: 1.概念: C++ 是一种静态类型的.编译式的.通用的.大小写敏感的.不规则的编程语言,支持过程化编程.面向对象编程和泛型编程. C++ 被认为是一种中级语言,它综合了高级语言和低级语言 ...
- 夯实基础,彻底掌握js的核心技术(二):面向对象编程(Object Oriented Programming)
单例设计模式(Singleton Pattern) 1. 单例模式解决的问题: 表现形式: Var obj = {xxx; xxx, - } 2. 作用: 把描述同一件事物的属性和特征进行" ...
最新文章
- MYSQL注入天书之服务器(两层)架构
- 企业运维之域控篇(十)--SERVER 2003 迁移到 SERVER 2008 (异机)
- Win32 树视图控件的基本使用
- hdu 1115 计算多边形重心
- LINUX ltrace命令-用来跟踪进程调用库函数的情况学习
- CSS Grid布局(2)
- 《LabVIEW 虚拟仪器程序设计从入门到精通(第二版)》一2.6 小结
- python--一些特性
- python中numpy、matplotlib的引入及测试
- 1005 Spell It Right (20)(20 分)
- Android开发案例 设置背景图片轮播
- 【T+】win10/win11系统安装畅捷通T+Cloud专属云18.0
- android微信朋友圈相册背景,Android 仿微信朋友圈图片拖拽返回
- 简单爬虫爬取知乎日报并保存日报网页到本地
- Android NDK开发,使用ndk-build编译,写的太详细了
- html鼠标悬停多个效果,33个jQuery与CSS3实现的绚丽鼠标悬停效果
- 中国芝麻市场竞争规模及销售渠道分析报告2022-2028年版
- Sun jdk, Openjdk, Icedtea jdk关系
- linux的cd命名返回上级目录,返回根目录
- html加拼音注释,古诗加拼音注释版.doc
热门文章
- 9月计算机一级报名入口,北京市2018年9月计算机一级报名时间|网上报名入口【已正式开通】...
- oracle 导出数据 utl,使用utl_file做选择性数据导出
- grandle下载安装图解
- 如何调查一家公司是否靠谱?
- 2021年看得见的粉丝价值——五大平台KOL粉丝分析研究报告
- 正月初六 | 2月17日 星期二 | 快手体育拿下斯诺克赛事版权;华为推出“智慧养猪”方案;春节档总票房突破60亿元...
- c++计算园的面积与周长
- android辅助功能实现群发,Android 8.0实现发送通知的方法
- 管理活动目录域服务实训_2019级酒店管理专业前厅与客房服务校外课程实训总结篇...
- 王华(1985-),男,中国人民大学硕士生