C++类的复习
1、C++ 类的声明:
class class_name
{
private:
/*
*私有的数据和成员函数
*只能被本类中的成员函数引用,类外不能调用
*友元类例外
*/
public:
/*
*公共的数据和成员函数
*可以被本类中的成员函数引用,也可以被类的作用域内的其他函数引用
*/
protected:
/*
*受保护的数据和成员函数
*不能被类外访问,但可以被派生类的成员函数访问
*/
};
2、在类外定义成员函数
void class_name::fanction_name()
{
//函数体
}
3、定义内置函数
inline void class_name::fanction_name()
{
/*
* 内置函数在正真执行时,是把函数代码嵌入到程序的调用点
* 以减少调用成员函数的时间开销
* 内置函数的要求:函数规模很小,调用频率较高
*/
}
4、定义类的对象
class_name name_1,name_2;
5、对象成员的引用
(1) 通过对象名和成员运算符访问对象中的成员
class_name name_1;
name_1.fanction_name();
(2)通过指向对象的指针访问对象中的成员
class_name name_1,*p; //定义对象 name_1 和 class_name 类的指针变量 p
p = &name_1; //是 p 指向对象 name_1
p->fanction_name();
(3)通过对象的引用来访问对象中的成员
class_name name_1;
class_name & name_2 = name_1; //定义类的引用变量 name_2 并使之初始化为 name_1
name_2.fanction_name();
/*
*name_1 和 name_2 共同占用一段内存
*所以 name_2.fanction_name() 就是 name_1.fanction_name()
*/
6、构造函数
(1)构造函数的简介:
构造函数是用来处理对象的初始化;
构造函数的名字必须与类名同名,不能任意命名;
构造函数不能被用户调用,而是在建立对象时自动执行;
构造函数不具有任何类型,不返回任何值;
(2)构造函数在类外的定义
//先在定义类时的 public 中声明构造函数
class_name();
//在在类外定义
class_name::class_name()
{
/*如果用户自己没有定义构造函数,则 C++ 系统会自动生成一个构造函数,
* 只是这个构造函数的函数体是空的,不执行初始化操作
*/
}
(3)带参数的构造函数
class class_name
{
public:
class_name(int,int,int); //声明带参数的构造函数
private:
int height;
int width;
int lengh;
};
//在类外定义带参数的构造函数
class_name::class_name(int a,int b,int c)
{
height = a;
width = b;
lengh = c;
}
//定义对象并给三个成员变量赋初值
class_name name_1(1,2,3);
(4)构造函数的重载
在一个类中定义多个构造函数,以便对类的对象提供不同的初始化方法,
这些构造函数具有相同的名字,而参数的个数或参数的类型不同
编译器根据定义对象时给对象赋值的参数去确定对应的构造函数
//在类的定义中声明构造函数
class_name(); //声明一个无参数的构造函数
//声明一个有参数的构造函数,用参数的初始化表对数据成员初始化
class_name(int a,int b,int c):height(a),width(b),lengh(c){}
//定义对象
class_name::name_1; //定义对象 name_1 不指定实参,这时调用第一个构造函数
class_name::name_2(1,2,3);//定义对象 name_2 指定实参,这时调用第二个构造函数
7、析构函数
//析构函数在定义类时的声明
~class_name();
//在类外的定义
class_name::~class_name()
{
//析构函数的作用是在撤销对象占用的内存之前完成一些清理工作
}
8、this指针
在每一个成员函数中都包含一个特殊的指针 this ,它是指向本类对象的指针
它的值是当前被调用的成员函数所在的对象的起始地址
this 指针是用来区分不同对象的成员函数引用其对应的数据成员
9、派生与继承
(1)派生类的声明
//声明基类是 class_name 以公用继承方式的派生类 class_name_1
class class_name : public class_name_1
{
private:
//派生类中新增的成员
public:
};
(2)派生类成员的访问属性
基类成员函数不能访问派生类的成员
派生类的成员函数根据继承方式不同而不同:
公用继承
———————————————————————————————————
基类成员 | 派生类中的访问属性
———————————————————————————————————
私有成员 | 不可访问
———————————————————————————————————
公用成员 | 公用
———————————————————————————————————
保护成员 | 保护
———————————————————————————————————
私有继承
———————————————————————————————————
基类成员 | 派生类中的访问属性
———————————————————————————————————
私有成员 | 不可访问
———————————————————————————————————
公用成员 | 私有
———————————————————————————————————
保护成员 | 私有
———————————————————————————————————
保护继承
———————————————————————————————————
基类成员 | 派生类中的访问属性
———————————————————————————————————
私有成员 | 不可访问
———————————————————————————————————
公用成员 | 保护
———————————————————————————————————
保护成员 | 保护
———————————————————————————————————
10、友元
(1)友元的含义:
在一个类中声明一个外部函数或者另一个类的成员函数
为友元,则这个函数就可以访问这个类的私有数据
(2)友元的声明
//在类的定义时声明外部函数 fanction_name 为友元
friend void fanction_name(class_name &);
//在 class_name 类的定义时声明 class_name_1 的成员函数 fanction_name 为友元
friend void class_name_1::fanction_name(class_name &);
C++类的复习的更多相关文章
- UML:类图复习-鸡生蛋,蛋生鸡
这是前一阵<高级软件工程>课堂上,老师随堂出的一道讨论题,随手贴在这里: ps: 今天是520,正好聊一些OoXx,关于爱的扯淡话题:) 题目:“鸡生蛋,蛋孵鸡”,世间万物生生不息,如何用 ...
- 反射、反射机制、类加载、Class类专题复习
一.反射概念 1.反射机制允许程序在执行期借助于ReflectionAPI取得任何类的内部信息(比如成员变量,构造器,成员方法等等),并能操作对象的属性及方法.反射在设计模式和框架底层都会用到. 2. ...
- [java] 可视化日历的实现(基于Calendar类 )
写在前面 博文安排顺序如下 1.写在前面 2.源码 3.思路 4.相关知识 该小程序是对Date类及其相关类的复习 要求如下图:实现可视化日历 实现思路 1.先从键盘输入指定格式的字符串(str)2. ...
- Java类的继承与多态特性-入门笔记
相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...
- [Code::Blocks] Install wxWidgets & openCV
The open source, cross platform, free C++ IDE. Code::Blocks is a free C++ IDE built to meet the most ...
- Java基础笔记-多线程
线程: 方式一:继承Thread类并且复写run方法. 格式: class MyThread extends Thread { public void run() { 线程中要运行的代码. } } 其 ...
- CALayer & UIView 关系浅析
原文链接:http://www.jianshu.com/p/8e6a313c158e 一.CALayer和UIView的关系 UIView显示在屏幕上归功于CALayer 可以说:UIView依赖CA ...
- CALayer --> UIView
一.CALayer和UIView的关系 UIView显示在屏幕上归功于CALayer 可以说:UIView依赖CALayer,又高于CALayer 通过调用drawRect方法来渲染自身的内容,调节C ...
- 本人SW知识体系导航 - Programming menu
将感悟心得记于此,重启程序员模式. js, py, c++, java, php 融汇之全栈系列 [Full-stack] 快速上手开发 - React [Full-stack] 状态管理技巧 - R ...
随机推荐
- TCP(二)
TCP半连接和全连接问题 TCP握手过程详解 如上图所示,关键部分:syns queue(半连接队列)和accept queue(全连接队列) 正常情况下的处理过程如下: 1)当server端收到cl ...
- RPC-Thrift(一)
一个简单例子 IDL文件如下,详细的IDL语法参考官方文档http://thrift.apache.org/docs/idl. 通过代码生成工具得到两个文件:HelloService.java和Res ...
- codeforce C. Okabe and Boxes
题目传送门 这道题 每次删除一个点 那么这个点必然在栈里面 那么如果堆顶不是他 我们就需要一次操作使得堆合理 这时我们可以把他删除然后把他下面的点打个标记表示这下面的点以后想怎么排就怎么排以后都不需要 ...
- 【比赛】百度之星2017 初赛Round B
第一题 题意:给定n*m网络,定义两个棋子在同行同列则相互攻击,同时要求两个棋子的行和列不能一小一大,求满足条件的最大摆放的方案数. 题解:ans=C(max(n,m),min(n,m)),就是在ma ...
- 在Unity(C#)下实现Lazy Theta*寻路
在上篇文章中我们介绍了Lazy Theta*.本篇中我会演示一下我实现的Lazy Theta*. 先上代码 //在一个点被expand时是否调用DebugOnExpanded事件,用于debug查看e ...
- jquery发送json请求,给springmvc接收
js var obj = { 'name':name, 'desc':desc, 'scheduleStartTime':scheduleStartTime, 'scheduleEndTime':sc ...
- [ Openstack ] Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs 高可用集群
目录 Openstack-Mitaka 高可用之 概述 Openstack-Mitaka 高可用之 环境初始化 Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...
- win 7 浏览器被篡改小插曲
今天下班回家,打开台式机发现IE,火狐都被篡改了.作为运维都会有点强迫症.这是个桌面系统,实在是没兴趣捣鼓.但是还是没办法,经常要用.等我下次有空了,直接换linux好了. 于是开始排查问题吧: 1. ...
- ATM+购物车系统
ATM目录 start.py import os,sys from core import src base_path=os.path.dirname(os.path.dirname(__file__ ...
- Selenium2+python自动化22-发送各种类型附件邮件【转载】
前言 最近一些小伙伴,在搞邮箱的事情,小编于是去折腾了一下!总结了一些干货,与大家分享一下!速来,抱大腿,我要开车了! 基本思路就是,使用MIMEMultipart来标示这个邮件是多个部分组成的,然后 ...