赞
踩
结构化程序设计,自顶向下,逐步求精。理解难,修改难,查错难,重用难。
面向对象的程序设计方法,设计程序的过程–>设计类的过程
一类事物—-抽象—->(共同属性–>数据结构,行为–>函数)—-封装—->类
类的定义
class 类名
{
访问范围说明符:
成员变量
成员函数声明
};
1973,AT&T Dennis Ritchie,C
1983,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");
内联成员函数
整个函数体出现在类定义内部
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]未经初始化的指针,只调用两次构造函数
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。