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

面向对象程序设计方法

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

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

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

类的定义

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]未经初始化的指针,只调用两次构造函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值