C++语法学习(14p)

3.重解释类型转换: reinterpret_cast

不同类型的指针或引用之间相互转换。

char* p = "1234000000zhangfei  ";

struct Account{

    char numb[4];

    char passwd[6];

    char name[10];

};

Account* pa = reinterpret_cast<Account*>(p);

也可以在任何类型的指针和整数之间进行转换。

4.常类型转换:const_cast

去除常指针或常引用的常属性(去常)。

 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     const volatile int a = 10;//volatitle挥发性,编译器不再会优化;编译器会到内存中取值,禁止的常量优化
 6     int* p = const_cast<int*>(&a);
 7     *p = 20;
 8     cout << a << endl;//cout << 10 << endl; 编译器优化了,直接蒋a做了字面替换
 9     cout << *p << endl;//20
10     cout << p << ' ' << &a << endl;//地址一样
11 }

const修饰的变量不能做左值(不能放到赋值号的左边);

const 声明的变量不算是常量,应该叫右值变量;

三、C++之父给C程序员的建议

1.慎用宏,代之以const、enum、inline。

2.变量随用随声明同时初始化。

3.尽量用new/delete取代malloc/free。

4.少用void*,指针计算,联合和强制转换。

5.尽量使用string表示字符串,少用C风格的char*。

6.树立面向对象的编程思想。

四、面向对象编程(OOP)

BOP - 基于对象编程,使用现成的对象

OOP - 面向对象编程,使用现成的对象,还可以自己定义对象

1、什么是对象

万物皆对象。

2、编程思想

面向机器(汇编语言)

面向过程(C语言)——程序就是一系列的操作步骤

面向对象(C++,Java,C#,...)——程序就是一系列对象的交互,从对问题的描述入手编写程序。

抽象数据类型

手机:品牌、价格、外观、分辨率、处理器、内存

           玩游戏、运行软件、播放媒体、打电话

对象:属性+行为

学生:姓名、年龄

           学习、休息、娱乐

3、类和对象

类是对对象的抽象和描述,对象是类的具体化和实例化。

类的定义:

class 类名{

访问控制属性:

  成员变量;

  成员函数;

};

访问控制属性

public:公有,谁都可以访问该成员。

private:私有,只有自己可以访问该成员。

protected:保护,只有自己和自己的子类可以访问该成员。

4、构造函数

class 类名{

  类名(构造形参表):初始化表{

    构造函数体;

  }

};

当对象被创建时,构造函数会被自动调用,以完成对对象的初始化和资源分配工作。

类名 对象名(构造实参表); //栈对象

new 类名(构造实参表); //堆对象

1)如果一个类没有定义构造函数,系统会提供一个无参构造函数(缺省构造函数),使成员变量获得定义,

   对于基本类型的成员变量不初始化,对类类型的成员变量,用相应类型的无参构造函数初始化。

     反之,如果定义了构造函数,无论有参无参,系统都不会再提供无参构造函数了。

无参构造函数并非真的无参,可以以无参的方式去调用。(构造形参都是缺省参数)

2)构造函数重载:注意不要和缺省参数构成歧义。

3)初始化表:指示成员变量的初始化方式。

A.如果有类类型成员变量,而该类型又没有无参构造函数,则必须通过初始化表初始化该成员变量。

B.需要在子类中指定其基类部分的初始化方式,必须使用初始化表。

C.成员变量初始化顺序由声明顺序决定,而与初始化表的顺序无关。

(先声明的地址低,创建内存从低地址开始,一块一块往上增长。)低地址往高地址创建

class Dumy{

public:

  Dumy(char* p):m_str(p),m_len(m_str.length()){}//ERROR

  Dumy(char* p):m_str(p),m_len( strlen(p) ){}//OK

private:

  int m_len;

  string m_str;

};

构造构成:构造基类部分 -> 定义(并初始化)成员变量 -> 构造函数体中的代码

(保证当执行到函数体的时候,所有需要的资源(成员变量)都已经有了)

5.分开声明和定义类

类的声明部分放在.h中

类的实现部分放在.cpp中

使用该类的代码可能还会在其它.cpp中

 

posted on 2018-03-29 23:30  enjoyzhao  阅读(246)  评论(0)    收藏  举报

导航