C++学习笔记02

指针

  用来保存某种类型的变量的地址的变量,取地址&  ->知道变量取地址,某个地址的变量: *地址

  成员指针,(*地址).成员,地址->成员

  向函数传递参数的时候,如果希望函数能操作某个变量里的数据,就把变量的地址传递给函数,函数里就可以根据地址找到内存中的那个变量,从而取得或者改变变量里的值。

  地址运算

    +n,-n 始终与地址的类型为单位来走,例如整形移动4*n个字节 p+n,p-n

    P[i] ==> *(p+i)

    

#include<iostream>
using namespace std;

int main()
{
int a[5] = {11,12,13,14,15};
int *p = a;
cout<< a[2] << ‘,‘<<p[2]<<endl;
cout<< *(a+2) << ‘,‘<< *(p+2)<<endl;
cout<< 2[a] << ‘,‘<< 2[p] <<endl;
system("pause");
return 0;
}

    p-q结果是多少个单位,单位为sizeof(地址类型),比较

    指针定义时建议带初始化从而避免野指针,不要通过空指针或目标已经释放掉的指针去找变量(*),不要返回非静态局部变量的地址作为函数的返回值,作为函数形参的指针如果不用于改变目标的值就尽量加const修饰保护目标不被误伤。

    X const *p <==> const X *p; p指向的只读X类型的数据

  函数指针

    int f1(char* ,int) -> int (*p) (char* int);

  数组指针

    int a[8]; ->int (*p)[8]

  输出地址:

    输出字符类型的地址,为了保持与C语言的兼容,系统处理成输出字符串    

#include<iostream>
using namespace std;

int main()
{
    char c = ‘a‘;
    char *p = &c;
    int i= 1;
    int *q = &i;
    cout << p <<‘,‘<<q<<endl;
    system("pause");
    return 0;
}

  引用

    引用一个常亮应该对引用加const.用临时结果(运算结果或者函数的普通返回值)去初始化一个引用时,也应该对引用加const

    const int x=20;

    const int& rx = x;

面向对象 Object-Oriented Programming

    C语言是一系列的函数描述程序的工作过程,称为过程。

    C++把程序里面的数据和对数据的操作合起来看作一个实体称为对象,编程工作就是操纵这些对象相互作用来完成程序的功能,这样的编程方式称为面向对象。

  抽象:每个实体都有很多的数据和很多的行为,只提取咱们关心的数据和行为。

  封装:用抽象的结果来描述实体的类型,在C++中可以用结构来实现封装,但出于跟C语言的兼容一般在C++结构也只封装数据,用class关键字来实现真正的封装,封装后的东西称为类。

    *********************封装好的类/结构只是一个类型***************************

  定义类:

    class xxx{

          成员变量或者成员函数的定义

    };

  结构与类的区别

    结构默认情况下就是一个简单打包,内容对外是透明的,可以通过结构变量名访问它的任何一个成员。  

    类默认是保密封装,对外是不透明的,不允许通过变量直接访问它的成员,除非是故意公开的(public),一般公开的都是函数

    这种类或者结构类型的变量(实例)就称之为对象

#include <iostream>
using namespace std;

struct sDate{//全部成员默认公开
    int year;
    int mouth;
    int day;
 void set(int y,int m,int d){
     year= y,mouth= m,day=d;
 }
 void print(){
     cout<<year<<‘-‘<<mouth<<‘-‘<<day<<endl;
 }
};

class cDate{//默认不公开,private
    int year;
    int mouth;
    int day;

public: //以下部分公开,若未公开则无法访问
    void set(int y,int m,int d){
        year= y,mouth= m,day=d;
    }
    void print(){
         cout<<year<<‘-‘<<mouth<<‘-‘<<day<<endl;
    }
};

int main()
{
    sDate s;//定义对象s
    cDate c;//定义对象c

    s.set(2012,12,21);//使用对象
    c.set(2016,4,28);//使用对象

    s.print();
    c.print();
    system("pause");
    return 0;
}

    成员函数如果在外面实现(函数体不在这个类的内部),那么函数名应该写成“类名::函数名”。结构也是如此

    多文件结构:一个类一般写成一个.h文件和一个.cpp文件,在.h文件中,成员函数只有声明,没有函数体,在.cpp文件中包含.h文件并且给出那些成员函数的定义(包括函数体)

    myclass.h:

#ifndef MY_CLASS_DEFANT

struct sDate{
    int year;
    int mouth;
    int day;
 void set(int y,int m,int d);
 void print();
};

class cDate{
    int year;
    int mouth;
    int day;

public: //以下部分公开
    void set(int y,int m,int d);
    void print();
};
#endif

     myclass.cpp

#include<iostream>
using namespace std;
#include "myclass.h"

void sDate::set(int y,int m,int d){
     year= y,mouth= m,day=d;
 }
 void sDate::print(){
     cout<<year<<‘-‘<<mouth<<‘-‘<<day<<endl;
 }

 void cDate::set(int y,int m,int d){
     year= y,mouth= m,day=d;
 }
 void cDate::print(){
     cout<<year<<‘-‘<<mouth<<‘-‘<<day<<endl;
 }

    main.cpp

#include <iostream>
using namespace std;
#include "myclass.h"

int main()
{
    sDate s;
    cDate c;

    s.set(2012,12,21);
    c.set(2016,4,28);

    s.print();
    c.print();
    system("pause");
    return 0;
};

    构造函数

      创建每一个对象时会自动调用一个成员函数,函数名就是类名,无返回类型。

      构造函数可以重载,一般访问限制为公开 

#include<iostream>
#include <string>
using namespace std;

class Cat{
public:
    Cat(){cout<<"call Cat()" <<endl;}
    Cat(string s) {cout<<s<<"猫闪亮登场!"<<endl;}
};
class Dog{
public:
    Dog(){cout<<"call Dog()" <<endl;}
    Dog(string s) {cout<<s<<"犬横空出世!"<<endl;}
};
int main()
{
    Cat c;//自动调用无参构造函数
    Dog d;
    Cat c2("加菲");//自动调用带string参数的构造函数
    Dog d2("贵宾");  Cat c3();// *特别注意* 声明一个函数c3,返回类型Cat,参数表空,并非实例化一个对象
    system("pause");
    return 0;
}

 

时间: 2024-10-05 04:58:34

C++学习笔记02的相关文章

【OpenGL 学习笔记02】宽点画线

我们要知道,有三种绘图操作是最基本的:清除窗口,绘制几何图形,绘制光栅化对象. 光栅化对象后面再解释. 1.清除窗口 比如我们可以同时清除颜色缓冲区和深度缓冲区 glClearColor (0.0, 0.0, 0.0, 0.0);//指定颜色缓冲区清除为黑色 glClearDepth(1.0);//指定深度缓冲区的清除值为1.0 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//指定要清除的缓冲区并清除 2.绘制几何图形 先要设置绘制颜色,

SWIFT学习笔记02

1.//下面的这些浮点字面量都等于十进制的12.1875: let decimalDouble = 12.1875 let exponentDouble = 1.21875e1 let hexadecimalDouble = 0xC.3p0//==12+3*(1/16) 2.//类型别名,用typealias关键字来定义类型别名 typealias AudioSample = UInt16 var maxAmplitudeFound = AudioSample.min 3.//元组 let ht

Blender学习笔记 | 02 | 操作

Shift 点击不同图层 同时显示多图层物件 z 切换 Solid / Wireframe 视图模式 点选物件后M 移动到图层选项 Ctrl + 鼠标左键拖动 自由全选物件 B 方形区域圈选物件 Tab Object / Edit Mode 切换 T 开 / 关 侧栏 Ctrl + Tab 编辑状态下切换编辑对象 E Extrude Region 推挤区域.以发现为轴线. X 删除物件菜单 Blender学习笔记 | 02 | 操作,布布扣,bubuko.com

mongodb 学习笔记 02 -- CURD操作

mongodb 学习笔记 02 – CURD操作 CURD代表创建(Create).更新(Update).读取(Read)和删除(Delete)操作 创建库 直接 use 库名 然后创建collection 就可以创建库 创建collecion db.createCollection("collectionName") 隐式创建collection db.collectionName.insert({xxxxxx}) 删除collection db.collectionName.dro

软件测试之loadrunner学习笔记-02集合点

loadrunner学习笔记-02集合点 集合点函数可以帮助我们生成有效可控的并发操作.虽然在Controller中多用户负载的Vuser是一起开始运行脚本的,但是由于计算机的串行处理机制,脚本的运行随着时间的推移,并不能完全达到同步.这个时候需要手工的方式让用户在同一时间点上进行操作来测试系统并发处理的能力,而集合点函数就能实现这个功能. 可通过将集合点插入到 Vuser 脚本来指定会合位置.在 Vuser 执行脚本并遇到集合点时,脚本将暂停执行,Vuser 将等待 Controller 或控

Wojilu学习笔记 (02)

使用RequireJS (1)整个页面,应该只有一个 <script src="" > 标签,并且放在页面底部,用来引入 RequireJS 和 main.js 文件 <script data-main="~js/main" src="~js/lib/require-jquery-wojilu.js?v=#{jsVersion}"></script> (2)在页面头部的 <head> 部分,增加一行

Android自定义view学习笔记02

Android自定义view学习笔记02 本文代码来自于张鸿洋老师的博客之Android 自定义View (二) 进阶 学习笔记,对代码进行些许修改,并补充一些在coding过程中遇到的问题.学习的新东西. 相关代码 //CustomImageView.java package mmrx.com.myuserdefinedview.textview; import android.content.Context; import android.content.res.TypedArray; im

HTML学习笔记02

HTML学习笔记02 一.HTML常用标签 HTML标题:h1-h6 HTML段落:p HTML链接:a HTML图像:img 二.HTML元素语法 HTML元素以开始标签起始. HTML元素以结束标签终止. 元素的内容是开始标签与结束标签之间的内容. 某些HTML元素具有空内容. 大多数HTML元素可拥有属性. 大多数HTML元素可以嵌套. HTML标签对大小写不敏感,但推荐使用小写. 三.HTML属性 HTML标签可以拥有属性. 属性总是以名称/值的形式出现,比如:name="value&q

OGG学习笔记02

实验环境:源端:192.168.1.30,Oracle 10.2.0.5 单实例目标端:192.168.1.31,Oracle 10.2.0.5 单实例 1.模拟源数据库业务持续运行 2.配置OGG前期准备 3.配置OGG单向复制 1.模拟源数据库业务持续运行 OGG的单向配置比较简单,但实际生产过程很多业务要求不间断运行,所以我创建了2张模拟业务表,简单模拟在业务不间断运行场景下OGG的配置. 1.1 创建模拟的业务用户 首先我创建业务用户jy,并指定密码,赋予基本业务用户的角色权限. --u

构建之法 学习笔记02

在一个项目运行的过程中,所有参与者都是团队的一份子,都是推进进度的零件.因此在知识和技术之上,不可或缺的是对于团队的建设. 在这次的学习笔记之中我想简要谈谈本书的第十七章的内容--人,绩效和职业德行. 在这个章节里,书中首先提出了这样一个概念:猪,鸡和鹦鹉,这三种动物都有着在团队中各自潜在的含义.一个团队的人可能来自五湖四海,有个各自的性格和特性,但是肯定都有着同一个目标,为着同一个目标而走到了一起. 有些人是猪--在这里的意向并无贬义,对他们来说,想要项目成功就得拿出自己身上的肉,背水一战:一