C++学习日记day02

原创 2012年03月22日 21:00:46

第二课
1. 引用与函数
1) 引用型参数
通过引用型参数可以提高参数传递的效率,但是会带来风险,可能会在函数中意外地修改实参

的值,为此可以采用const型引用,避免发生这样的错误。
2) 引用型返回值
任何时候都不要返回局部变量(包括函数参数)的引用。
可以返回:
全局变量、静态变量、动态分配变量、成员变量、实参引用
2. 类型转换
int n;
char c = (int)n;
char c = int (n);
1) 静态类型转换:static_cast<目标类型> (源类型标识符)
转换时做静态类型检查。
在源类型和目标类型之间一个方向上可以做隐式转换,则在两个方向上都可以做静态转换。
char* pc;
void* pv = pc;
pc = static_cast<char*> (pv);
2) 动态类型转换:dynamic_cast<目标类型> (源类型标识符)
应用具有多态关系的父子类之间。
3) 重解释类型转换:reinterpret_cast<目标类型> (源类型标识符)
用在不同类型的指针之间做任意的转换。
int n;
char* p = reinterpret_cast<char*> (&n);
p[0]
p[1]
p[2]
p[3]
10账号
8密码
20户名
struct Tel {
    char acc[18];
    char pwd[8];
    char name[20];
};
char* p;
Tel* pTel = reinterpret_cast<Tel*> (p);
pTel -> acc
pTel -> pwd
pTel -> name
4) 常量类型转换:const_cast<目标类型> (源类型标识符)
修改CV属性。
const int* cp = ...;
int* p = const_cast<int*> (cp);
const int& cr = ...;
int& r = const_cast<int&> (cr);
const int n = 10;
int* p = const_cast<int*> (&n);
*p = 20;
n -> 20 ?
3. C++之父给C程序员的建议
1) 在C++中几乎不使用宏,用const、enum、inline、template替代之。
2) 变量随用随声明同时初始化。
int size = 0;
// 获取文件大小
int size = ftell (fp);
char* buf = new char[size];
3) 不用malloc()/free()而改用new/delete。
4) 避免使用void*、指针算术、联合、强制类型转换。
5) 字符串尽量避免使用C风格的字符串,而使用string类型。
直接赋值:string s = "hello";
          string s ("hello");
直接复制:s1 = s2;
直接拼接:s1 += s2;
6) 更加重要的是思想:OOP。C++/++C。
4. 面向对象编程
1) 什么是对象:对象就是个东西。属性和行为。
2) 什么是面向对象:以属性和行为的观点分析现实世界的事物——大处着眼。
3) 什么是面向对象编程:用面向对象的方法编程。
4) 为什么要面向对象编程:软件产业化发展的需求。
5) 怎样做到面向对象编程:面向对象的思想精髓(封装、继承、多态),至少掌握一种编程语

言C++/Java/C#,元语言UML,设计模式。
5. 类和对象
学生
  属性:姓名、年龄、性别、学号
  行为:学习、娱乐
教师
  属性:姓名、年龄、性别、职称
  行为:教学、娱乐
1) 类的定义
class 类名 {
};
如:
class Student {
};
2) 成员变量
class 类名 {
    类型 成员变量名;
};
如:
class Student {
    string m_strName;
    int m_nAge;
};
3) 成员函数
class 类名 {
    返回类型 成员函数名 (形参表) {
        成员函数体;
    }
};
如:
class Student {
    void Learn (string strLesson) {
        ...
    }
    string m_strName;
    int m_nAge;
};
声明和实现分开:
class Student {
    void Learn (string strLesson);
    string m_strName;
    int m_nAge;
};
void Student::Learn (string strLesson) {
    // ...
}
4) 访问控制
A. public:公共成员,谁都可以访问;
B. private:私有成员,只能自己访问;
C. protected:保护成员,只能自己和子类访问。
如:
class Student {
public:
    void Learn (string strLesson) {
        cout << m_strName;
    }
private:
    string m_strName;
    int m_nAge;
};
访控限定符 访控属性 自己 子类 其它
public     公共成员  OK   OK   OK
protected  保护成员  OK   OK   NO
private    私有成员  OK   NO   NO
注意:类的缺省访控属性是private,而结构的缺省访控属性是public。
5) 构造函数
class 类名 {
    类名 (形参表) {
        构造函数体;
    }
};
当对象被创建的时候构造函数自动被调用。可以对对象的成员变量做初始化。
如:
class Student {
    Student (string strName, int nAge) {
        m_strName = strName;
        m_nAge = nAge;
    }
};
Student student ("张飞", 25);
如果没有为一个类提供任何构造函数,系统就会提供一个无参构造函数(缺省构造函数、默认

构造函数)。如果为该类提供了至少一个构造函数,无论其有参无参,系统都不会再提供任何

形式的构造函数。
无参构造函数未必真的没有参数,而是可以以无参的方式被调用。
6) 初始化表
class 类名 {
    类名 (形参表) : 成员变量 (初始值), ... {
        构造函数体;
    }
};
class Dumy {
public:
    Dumy (string str) : m_str (str), m_len (str.length ())
    {
    }
private:
    int m_len;
    string m_str;
};
int n = 10;
Dumy d (...);
练习:
定义一个类Girl
属性:姓名、年龄、是否有BF。
提供一个无参构造函数和一个有参构造函数,以及用于显示全部属性的成员函数。
练习:
time_t t = time (NULL);
struct tm* pt = localtime (t);
sleep (1);
定义一个类Clock
属性:时、分、秒
无参构造函数,用当前的系统时间初始化时分秒属性。
成员函数Run(),打印16:33:12,每秒更新一次
Clock clock;
clock.Run ();

 

 

 

 

 

C++学习日记day04

第四课 1.成员指针 1)指向成员变量的指针 定义:成员变量类型 类名::*指针变量名; 赋值/初始化:指针变量名=&类名::成员变量名; 解引用:对象.*指针变量名、对象指针->*指针变量...

C++学习日记day03

第三课 1. 初始化表的必要性 1) 类中包含常量和引用型的成员变量。必须通过构造函数和初始化表显式地对其进行初始化。 2) 在子类中显式地构造其基类部分。 class A { public...

C++学习日记day06

第六课 1.动态绑定的底层实现——虚函数表 class A {...}; class B : public A {}; A* pa = new B; 当编译器编译如下语句时 pa -> f...

Java基础学习日记Day02

一、java语言组成 二、Java中的名称规范 三、常量 四、变量 五、关于运算符 六、转义字符 七、赋值运算符 八、逻辑运算符与位运算符 九、程序流程控制要点...

开发日记——手机安全卫士 Day02 2016-7-21 完成导航页面和切换功能

手机安全卫士 Day02 2016-7-21 完成导航页面和切换功能 导航页面底端使用RadioGroup和RadioButton控件。RadioButton背景使用了自定义的背景选择器,用于控制按...

C++学习日记 3

  • 2014年01月11日 22:09
  • 2KB
  • 下载

C++学习日记 1

  • 2014年01月09日 22:52
  • 2KB
  • 下载

C++学习日记9——vector用法

C++的Vector向量用法

C++学习日记--分支结构(if语句)

  • 2014年02月18日 22:37
  • 103KB
  • 下载

C++学习日记

  • 2012年09月10日 11:01
  • 260KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++学习日记day02
举报原因:
原因补充:

(最多只允许输入30个字)