您的位置:首页 > 编程语言 > C语言/C++

C++程序设计 - Week 2 类和对象初探

2015-06-01 17:42 411 查看

面向对象程序设计方法

结构化程序设计,自顶向下,逐步求精。理解难,修改难,查错难,重用难。

面向对象的程序设计方法,设计程序的过程–>设计类的过程

一类事物—-抽象—->(共同属性–>数据结构,行为–>函数)—-封装—->类

类的定义

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");


内联成员函数和重载成员函数

内联成员函数

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]未经初始化的指针,只调用两次构造函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息