`
java-mans
  • 浏览: 11339864 次
文章分类
社区版块
存档分类
最新评论

【c++ primer】第十章 对象和类

 
阅读更多

一,过程性编程和面向对象编程

1)采用过程性编程方法,首先考虑要遵循的步骤,然后考虑如何表示这些数据。

2) 采用面向对象编程,首先从用户角度考虑对象,描述对象所需要的数据,以及描述用户与数据交互所需要的操作。完成对接口的描述后,需要确定如何实现接口和数据存储,最后使用心得设计方案创建出程序。

二,抽象和类

1)类:将抽象转换为用户定义类型的C++工具,将数据表示和操纵数据的方法组合成一个整洁的包。

2)类包括:类声明:数据成员的方式描述数据部分,成员函数的方式描述公有接口

类方法定义:描述如何实现类成员函数

3)数据隐藏:将数据放在类的私有部分

封装:隐藏对象的属性和实现细节,仅对外开发公有接口

4)成员函数:定义时使用 :: 标识函数所属的类;可以访问类的private组件

void stock::buy(double price) // buy函数具有类作用域,其他成员函数不用:: 就可以访问

5)public:定义的函数或成员变量可以被任何方法访问

protect:只可以被本类中方法或派生类中的方法访问

private:只能被本类中方法访问

6)类例子:

#include <iostream>
#include <cstring>
class student
{
private:
    char *name;
    int  num;  
    double average_score;
    int count;
public:
    student(char *m_name,int m_num,double m_average_score,int m_count);
    student();
    ~student();
    void update(char *m_name,int m_num,double m_average_score,int m_count);
    void show();
};

student::student(char *m_name,int m_num,double m_average_score,int m_count)
{
    name=m_name;
    num=m_num;
    average_score=m_average_score;
    count=m_count;
}
student::~student()
{
}
student::student()
{
}
void student::update(char *m_name,int m_num,double m_average_score,int m_count)
{
    name=m_name;
    num=m_num;
    average_score=m_average_score;
    count=m_count;
}
void student::show()
{
   using std::cout;
   using std::endl;
   cout<<"name:"<<name<<endl;
   cout<<"num:"<<num<<endl;
   cout<<"average_score:"<<average_score<<endl;
   cout<<"count:"<<count<<endl;
}
 int main()
{
   using std::cout;
   char *m_name="tianshuai";
   student *s=new student(m_name,01,98.8,5);//new申请 返回指针
   s->show();
   s->update("xiaoming",02,99.6,10);
   s->show();
   
   return 0;
}

7)使用类注意的地方:

1,构造函数和析构函数没有返回类型

2,一般程序不能直接访问数据成员,只能通过成员函数来访问数据成员

3,构造函数时候,不要将类成员名称用作构造函数的参数(m_value)

4,不能使用对象调用构造函数,因为构造函数构造出对象之前对象不存在

5,通常不应该在代码中显式调用析构函数,对象被删除后调用析构函数

三,this指针

this指针用来指向,调用该方法的对象。指向被调用函数所在的类实例的地址

每个成员函数都有一个this指针,指向调用对象

*this 表示对象本身

四,对象数组

默认构造函数(default constructor)就是在没有显式提供初始化式时调用的构造函数。它由不带参数的构造函数,或者为所有的形参提供默认实参的构造函数定义。如果定义某个类的变量时没有提供初始化式就会使用默认构造函数。

当程序创建没有被显式初始化的类对象时,总是调用默认构造函数。

接口:函数声明

类作用域:成员变量不能在声明中初始化


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics