C++程序设计 - Week 2 类和对象初探
2015-06-01 17:42
411 查看
面向对象程序设计方法
结构化程序设计,自顶向下,逐步求精。理解难,修改难,查错难,重用难。面向对象的程序设计方法,设计程序的过程–>设计类的过程
一类事物—-抽象—->(共同属性–>数据结构,行为–>函数)—-封装—->类
类的定义
class 类名 { 访问范围说明符: 成员变量 成员函数声明 };
面向对象程序设计语言的发展历程
1973,AT&T Dennis Ritchie,C1983,AT&T Bjarne Stroustrup,C++
The C++ Programming Language
从客观事物抽象出类的例子
类,带函数的结构体。class CRectangle { public: int w, h; void Init(int w_, int h_) { w = w_; h = h_; } int Area() {...} int Perimeter(); }; int CRectangle::Perimeter() { return 2 * (w + h); } CRectangle r; r.Init(w, h);
类定义的变量–>类的实例–>对象
对象的内存空间。对象的大小=所有成员变量的大小之和。(虚函数?=0?)
空类型的实例中不包含任何信息,本来求sizeof应该是0,但是当我们声明该类型的实例的时候,它必须在内存中占有一定的空间,否则无法使用这些实例。至于占用多少内存,有编译器决定。Visual Studio中,每个空类型的实例占用1字节的空间。(《剑指offer 名企面试官精讲典型编程题》P22、23,《Effective C++》中列举了使用C++经常出现的问题及解决这些问题的技巧)
class MM { }; sizeof(MM) = 1 // ?? MM m; sizeof(m) = 1
对象之间可以用“=”进行赋值,其他需要运算符重载。
void PrintRectangle(CRectangle &r);
类成员的可访问范围
private, public, protected缺省为私有成员,而 struct 缺省为公有成员
类的成员函数内部,可以访问:当前对象的全部属性、函数;同类其它对象的全部属性、函数(??)
设置私有成员的目的:强制对成员变量的访问一定要通过成员函数进行。隐藏私有成员。
szName --> char szName[5]; // 迁移 strcpy(man1.szName, "tomhhdksf"); // vs. man1.setName("tomhhdksf");
内联成员函数和重载成员函数
内联成员函数inline+成员函数
整个函数体出现在类定义内部
class B {
inline void func1();
void func2() {…}
};
使用缺省参数要注意避免有函数重载时的二义性(缺省参数)
构造函数
成员函数的一种,名字与类名相同,可以有参数,不能有返回值。作用是对对象进行初始化。对象生成时,构造函数自动被调用。如果定义类时没写构造函数,则编译器生成一个默认的无参数的构造函数。默认构造函数无参数,不做任何操作。
如果定义了构造函数,则编译器不生成默认的无参数的构造函数。
Complex c1; // 默认构造函数被调用 Complex *pc = new Complex; // 默认构造函数被调用 CSample array1[2]; // 调用两次无参构造函数 CSample array2[2] = {4, 5}; Test array1[3] = {1, Test(1, 2)} Test *pArray[3] = {new Test(3), new Test(1, 2)}; // pArray[2]未经初始化的指针,只调用两次构造函数
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- C++中拷贝构造函数的应用详解
- C++中引用(&)的用法与应用实例分析
- C++使用CriticalSection实现线程同步实例
- C++智能指针实例详解