学习C++的第四天
1、头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用”
//文件路径名:el_1\hello.h
#ifndef _HELLO /////如果没有定义 _HELLO文件
#define _HELLO /////////////那么定义 _HELLO文件
void Hello(void); ////全局函数声明
#endif
2、头文件一般用于存放函数原型
3、类本质上是C语言中结构体的扩充,类中不但可以包含数据成员,还可以包含函数成员,并规定了对类中成员的三级访问权限
在public中声明的成员可以在程序中自己进行访问
在private和protected中声明的成员可以被 此类的成员函数 及 声明为友元的函数所访问
在protected中声明的成员可以被此类派生的类所访问,而在private中声明的成员则不能被此类派生的类所访问
4、
/////rectangle.h////类的声明放在头文件中
class Rectangle /////定义一个Rectangle 类
{
private:
int length , width , height; ////长方体的长宽高
public:
Rectangle(int len,int wd,int ht); ////构造函数。。。。。。。构造函数名与类名相同
virtual~Rectangle(void){} /////析构函数。。。。。。。。析构函数主要用于含有指针的数据成员中释放动态数据成员
int Volume(void); ///返回长方体体积的函数-----------------------------改动为int Volume(Rectangle oRectangle)
};
///////rectangle.cpp////////类的实现放在源文件中
# include"rectangle.h" //切记要用双引号
Rectangle::Rectangle(int len, int wd, int ht)
{
length = len;
width = wd;
height = ht;
}
int Rectangle::Volume(void) -------------------------改为int Rectangle::Volume(Rectangle oRectangle)
{
return length*width*height;----------------------------改为 return oRectangle.length*oRectangle.width*oRectangle.height;
}
///////main.cpp///////////主函数
# include<stdlib.h>
# include<iostream>
# include"rectangle.h" ////提供类Rectangle的声明
using namespace std;
int main(void)
{
Rectangle a(6,8,9); 利用构造函数 构造一个长方体a 此时传入len=6 wd=8 ht=9 然后再传给length width height
int v = a.Volume(); 因为属于Rectangle类 所以需要a. 利用length width height 计算体积 -------------改为a.Volume(a);
cout<<v<<endl;
system("pause");
return 0;
}
改完后等式仍会成立
5、关于 友元
/////rectangle.h////类的声明放在头文件中
class Rectangle
{
private:
int length , width , height;
public:
Rectangle(int len,int wd,int ht);
virtual~Rectangle(void){}
friend int Volume(Rectangle oRectangle);///////加了个friend 意味着该函数并不属于Rectangle类
};
///////rectangle.cpp////////类的实现放在源文件中
# include"rectangle.h"
Rectangle::Rectangle(int len, int wd, int ht)
{
length = len;
width = wd;
height = ht;
}
int Volume(Rectangle oRectangle) ///////友元函数 已经在Rectangle类中声明过------区别在于该函数不属于Rectangle类
{
return oRectangle.length*oRectangle.width*oRectangle.height;
}
///////main.cpp///////////主函数
# include<stdlib.h>
# include<iostream>
# include"rectangle.h"
using namespace std;
int main(void)
{
Rectangle a(6,8,9);
int v = Volume(a);因为不属于Rectangle类,所以不需要a.
cout<<v<<endl;
system("pause");
return 0;
}
具体大概有下面两种情况需要使用友元函数:(1)运算符重载的某些场合需要使用友元。(2)两个类要共享数据的时候。
1.2.1优点:能够提高效率,表达简单、清晰。
1.2.2缺点:友元函数破环了封装机制,尽量不使用成员函数,除非不得已的情况下才使用友元函数。
6、c++的一大特性就是重载(overload),通过重载可以把功能相似的几个函数合为一个,使得程序更加简洁、高效。在c++中不止函数可以重载,运算符也可以重载。由于一般数据类型间的运算符没有重载的必要,所以运算符重载主要是面向对象之间的。
7、C++的参数传递(传给函数)
<1>传值方式:是默认方式,在调用函数时,将实参的值传递给函数局部存储相应参数的副本,函数对副本操作,只改变副本的值,而不会修改实参的值
<2>引用方式:引用方式需要在形参声明时参数名前加上符号&,在调用函数时,被传递的不是实参的值,而是实参的地址,函数通过地址存取实参。C语言通过指针实现。
将数组作为值参传递时,由于数组名实际表示数组的起始存储地址,传递的是数据第一个元素的地址,这样对数组元素的修改本质是对实参数组元素的修改
void swap(int &a,int &b)------------用引用&传递方式b实现
{
int t;
t = a;
a = b;
b = t;
}--------------------------------------对应swap(u,v)---------------int a=1 ;int &ra = a; 则ra=1;-------ra = ra-1;cout<<a;输出0 引用的值改变能改变实参的值
void swap(int *a,int *b)------------用指针传递方式实现
{
int t;
t = *a;
*a = *b;
*b = t;
}--------------------------------------对应swap(&u,&v)
8、DEVC++出现打开文件失败的情况 有可能是32位机子然后却选择了64位的解决方法(右上角)
9、exit()
# include<iostream>
using namespace std;
int main()
{
int a[10];
*(a+1)= 5;
cout<<a[1];
return 0;
}
15、 &a[9] - 3 = a +9 - 3 = a +6 = &a[6] &a[9] - &a[6] = a+9-a-6=3 除此之外,其他任何对地址的运算操作都是不允许的
学习C++的第四天的更多相关文章
- 我的MYSQL学习心得(十四) 备份和恢复
我的MYSQL学习心得(十四) 备份和恢复 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) ...
- 【Unity Shaders】学习笔记——SurfaceShader(四)用纹理改善漫反射
[Unity Shaders]学习笔记——SurfaceShader(四)用纹理改善漫反射 转载请注明出处:http://www.cnblogs.com/-867259206/p/5603368.ht ...
- OpenGL学习之路(四)
1 引子 上次读书笔记主要是学习了应用三维坐标变换矩阵对二维的图形进行变换,并附带介绍了GLSL语言的编译.链接相关的知识,之后介绍了GLSL中变量的修饰符,着重介绍了uniform修饰符,来向着色器 ...
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
- VSTO学习笔记(十四)Excel数据透视表与PowerPivot
原文:VSTO学习笔记(十四)Excel数据透视表与PowerPivot 近期公司内部在做一种通用查询报表,方便人力资源分析.统计数据.由于之前公司系统中有一个类似的查询使用Excel数据透视表完成的 ...
- Linux学习总结(十四)—— 查看CPU信息
文章首发于[博客园-陈树义],点击跳转到原文Linux学习总结(十四)-- 查看CPU信息. Linux学习总结(十四)-- 查看CPU信息 商用服务器CPU最常用的是 Intel Xeon 系列,该 ...
- Python学习笔记(十四)
Python学习笔记(十四): Json and Pickle模块 shelve模块 1. Json and Pickle模块 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不 ...
- 【平差软件学习---科傻】四、科傻二等水准平差(参数设置和in1文件讲解)
[平差软件学习---科傻]四.科傻二等水准平差(参数设置和in1文件讲解) 这个算是最后一集了,也可能不是如果我想到不足的地方我会在补上一集视频,或者是文章页.总感觉自己操作的很熟练,到自己真正讲的时 ...
- 深度学习课程笔记(四)Gradient Descent 梯度下降算法
深度学习课程笔记(四)Gradient Descent 梯度下降算法 2017.10.06 材料来自:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS1 ...
- python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法
python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...
随机推荐
- pc端常见布局---垂直居中布局 单元素定高
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- jsp另外五大内置对象之response-操作重定向
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...
- Python-OpenCV中的resize()函数
改变图像大小意味着改变尺寸,无论是单独的高或宽,还是两者.也可以按比例调整图像大小. 这里将介绍resize()函数的语法及实例. 语法 函数原型 cv2.resize(src, dsize[, ds ...
- React 官方脚手架 create-react-app快速生成新项目
进入新公司已经半年了,各个业务线,技术栈都已经熟悉,工作也已经游刃有余,决定慢下脚步,沉淀积累,回顾一下所用技术栈所包含的基本知识,以及再公司中的实战. 首先回顾新项目搭建 react脚手架目前使用较 ...
- hadoop相关资料集锦
1 Hadoop集群系列集锦http://www.cnblogs.com/xia520pi/archive/2012/04/08/2437875.html 2 Hadoop和MapReduce详解ht ...
- python_79_模块定义导入优化
''' 1.定义 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件 (文件名:test.py,对应的模块名:test. import ...
- JavaScript BOM DOM 对象
title: JavaScript BOM DOM 对象 tags: JavaScript --- browser object model document onject model BOM对象 w ...
- mybatis association嵌套association的两级嵌套问题
今天遇到了一个双表连接查询以及自关联的问题,由于第一次遇到,所以在这记下,日后好查阅 针对一个表的关联属性本身也有自关联的情况下,可以用association嵌套association的方法来处理. ...
- javaweb基础(12)_session详解
一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...
- MySQL索引类型及优化
索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytabl ...