C++ 类与对象

类与对象是C与C++的最大区别之一,也是从面向过程转为面向对象的一个转折点

以下分为多部分介绍

1.1 类,结构体的扩展

1.2 公有和私有

1.3 构造函数

1.1类,结构体的扩展

类(class)从使用上可以理解为结构体(struct)的扩展,类中除了可以包含变量、还可以包括方法等内容。

结构体

struct Car

{

  string s_strName;//名字
  int s_iWheelNumber;//轮子数量  

};

//使用结构体的方法如下

int main(void)

{

  struct Car car;

  car.s_strName="Benz"

  car.s_iWheelNumber=4;

  cout<<"名字:"<<car.s_strName;

}

在类(class)中,除了上述变量的结构体成员,还加入了move_forward() 函数、move_back()函数

class Car

{

public://这个在1.2介绍

  string m_strName;

  int m_iWheelNumber;

  void move_forward(void);

  void move_back(void);

};

void Car::move_forward(void)

{

  cout<<"前进"<<endl;

}

void Car::move_back(void)

{

  cout<<"后退"<<endl;

}

//要使用类,与结构体类似,需要将类进行实例化:

int main(void)

{

  Car car;//实例化;Car为类,car为对象

  car.m_strName="Benz";//调用car中的m_strName(到此步骤基本与struct相同)

  car.move_forward();//调用car中的move_forward方法。

  cout<<"汽车的名字:"<<car.m_strName<<endl;

  system("pause");//暂停控制台

  return 0;

}

1.2公有和私有

在类中,public关键字下为公有成员、函数,类的外部可以调用 。private则为私有,仅为类的内部才能使用

把1.1中的例子修改成下面

class Car
{
public:
  void setName(string _name)
  {
    m_strName = _name;
  }
  string getName(void)
  {
    return m_strName;
  }
  void move_forward(void);
  void move_back(void);
private:
  string m_strName;
  int m_iWheelNumber;
};

int main(void)

{

  Car car;//实例化Car为类,car为对象

//  car.m_strName="Benz";//private中的变量在外部不能直接调用

  car.setName("Benz");//调用car中的setName()来改变m_strName

  car.move_forward();//调用car中的move_forward方法。

  cout<<"汽车的名字:"<<car.getName()<<endl;

  system("pause");//暂停控制台

  return 0;

}

其中m_strName为pravite不能在外部直接操作,但可以使用类中的方法setName()可以改变m_strName的值,getName()方法可以返回m_strName的值,这也是面向对象的基本思想之一。

1.3构造函数

C++的类与结构体不同的第三大特性,类具有构造函数,构造函数名字与类名相同,在实例化的时候自动调用,一般用于对类中的成员赋予初始值。

继续使用上面的例子改造

class Car

{

  public:

    Car(){m_strName ="Benz",m_iWheelNumber=4;};//构造函数

    void move_forward(void);

    void move_back(void);

    void setName(string _name)
    {
      m_strName = _name;
    }

    string getName(void)
    {
      return m_strName;
    }

  private:

    string m_strName;

    int m_iWheelNumber;
};

int main(void)

{

  Car car;//实例化;Car为类,car为对象,在实例化时,会调用构造函数Car();

// car.setName("Benz");//不需要调用这句,构造函数已经为成员赋初值

  car.move_forward();//调用car中的move_forward方法。

  cout<<"汽车的名字"<<car.getName()<<endl;

  system("pause");//暂停控制台

  return 0;

}

这里值得说明的是,即是没有写构造函数,C++也会自动为类添加一个空的构造函数

构造函数可以带有参数,参数还可以有默认值:

  Car(string _name,int _wheelnumber=4){m_strName =_name,m_iWheelNumber=_wheelnumber;};//构造函数

基本构造函数还可以重载,一个方法可以有多个基本构造函数,将上面两种构造函数放在同一个类中:

class Car

{

public:

  Car(){m_strName ="Benz",m_iWheelNumber=4;cout<<"1"<<endl;};//构造函数1
  Car(string _name,int _wheelnumber=4){m_strName =_name,m_iWheelNumber=_wheelnumber;};//构造函数2

  ...

}

除了基本构造函数,还存在一个拷贝构造函数,也就是拷贝的时候调用的构造函数

class Car

{

  public:

    Car(){m_strName ="Benz",m_iWheelNumber=4;cout<<"1"<<endl;};//普通构造函数

    Car(const Car &car){cout<<"2"<<endl;}//拷贝构造函数

    void move_forward(void);

    void move_back(void);

    void setName(string _name)
    {
      m_strName = _name;
    }

    string getName(void)
    {
      return m_strName;
    }

  private:

    string m_strName;

    int m_iWheelNumber;
};

int main(void)

{

  Car car;//实例化Car为类,car为对象 触发构造函数 打印出 1

  Car car2(car);//car2拷贝car,触发了拷贝构造函数(不触发普通构造函数),会打印出 2

  car.move_forward();//调用car中的move_forward方法。

  cout<<"汽车的名字"<<car.getName()<<endl;

  system("pause");//暂停控制台

  return 0;

}

值得注意,对象在函数传参的时候会发生拷贝,此时也会触发拷贝构造函数。

另外,拷贝构造函数因为拷贝才发生,因此没有重载。

时间: 2024-10-19 12:15:34

C++ 类与对象的相关文章

Java 第七章 类和对象 笔记

一.对象的特征--类的属性 每个对象的每个属性都有特定的值 对象的操作--类的方法 二.封装:对象同时具有属性和方法两项特性.     对象的属性和方法通常被封装在一起,共同体现事物的特性,     二者相辅相成,不能分割. 三.类和对象的区别:     类:抽象的概念,是一个模子,确定了对象的属性和方法.    对象:能够看得见摸得着的实物.具有静态和动态特征. 四.定义类的步骤:     1.定义类名      2.定义类的属性 访问修饰符 属性类型 属性名称=默认值:     3.定义类的

类与对象

1.1 类和对象的关系   为什么要采用面向对象思想进行程序设计与开发 1.可以实现代码的复用 2.符合人思考的方式   类和对象的定义 1.类的定义:用class关键修饰的叫做类 2.对象的定义:类名定义的数据类型   类和对象之间关系 1.由对象归纳为类,是归纳对象共性的过程 2.在类的基础上,将状态和行为实体化为对象的过程为实例化   1.2 定义类   定义类的语法,类主要由成员变量和成员方法构成(暂不提构造函数) eg: publicclassStudent { //成员变量 intn

【编程语言】Java中的类和对象learn by Imooc

 一.什么是类和对象 * 类是模子,确定对象将会拥有的特征(属性)和方法 * 类的特点: *     类是对象的类型 *     具有相同属性和方法的一组对象的集合 * 对象的属性 *     属性-对象具有的各种特征 *     每个对象的每个属性都有用的特定值 * 对象的方法 *     方法-对象执行的操作(能干什么) * 类和对象的关系 *     类是抽象的概念,仅仅是模板 *     对象是一个你能够看得到,摸得着的具体实体 二. 如何定义Java的类 * 1.类的重要性:所有Jav

C++ 成员变量是别的类的对象

?在成员函数中,可以将this指针当参数传递,也可以返回this指针,或返回通过this指针拿到的对象 /* 成员变量是别的类的对象 */ #include <iostream> using namespace std; //日期类 class Date { int year,month,day; public: //构造方法 Date(){ cout << "Date() " << endl; } //有参 Date(int _y,int _m,i

l类与对象课后作业

java 的初始化规律 执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”. 执行类的构造函数. 类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行.因此,适合于封装那些“对象创建时必须执行的代码” 当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行. 请自行编写示例代码验证以上结论. public class InitializeBlockDemo { /**   * @param args   */ public static vo

第五节 类和对象

面向对象怎么理解? 1.1 面向对象是相对面向过程而言 1.2 面向对象和面向过程都是一种思想 1.3 面向过程:强调的是功能行为 1.4 面向对象:将功能封装进对象,强调具备了功能的对象 1.5 面向对象是基于面向过程的 特点: 三个特征:封装.继承.多态 我们在开发过程中,就是在找对象进行使用,没有对象就new一个对象. 找对象:建立对象,使用对象,维护对象的关系 封装: (1)是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. (2)好处:将变化隔离:便于使用:提供重用性:提高安全性

C++笔记二:类和对象

类和对象 1:面向对象基础 2: 定义类和对象 3: 类和对象的使用 4: 构造函数和析构函数 5: this指针和复制构造函数 6: static静态成员 7: const对象和const成员 8: friend友元 ---------------------------------------------------------------------------------------------------------------------- (1)面向对象基础 一.什么是面向对象程序

类、对象和包

相关概念: 对象: 对象是存在的具体实体,具有明确定义的特征和行为. 类:是具有相同属性和行为的一组对象的集合.类是对象的抽象,对象是类的实例. 包:包就是文件夹.利用包可以可以组织相关的类,同时可以做到信息的隐藏. 属性:属性用于描述对象的特征.由于属性是属于一个对象的组成,所以属性也叫成员变量.属性跟随对象放在堆空间中,书写在类中,在方法之外,随对象产生而产生,随对象销毁而销毁.特点:属性用于描述对象的特征,对象之间彼此独立,一个对象属性的变化不会影响其他对象属性的变化.属性通过对象. 的方

8.python之面相对象part.1(初识类与对象)

一.类和对象的概念. 什么是类 类就是把一类事物相同的特征和动作整合到一起就是类比如说"人"就是一个类. 什么是对象 对象就是基于类创建出来的一个具体存在的事物这个事物包含了将其创造出来的类的特征和动作. 类与对象有什么关系一切的对象都是由类产生的假如说造一支笔首先要有一个造笔的模版上帝制造人也是一样制造一个人也需要一个造人的模版这个模板就是人的"类"然后根据类的定义来产生一支支笔和一个个的人. 什么是实例化 由类产生对象的过程就是实例化类实例化的结果就是一个对象对

Java —类和对象

类和对象 类是对象的类型,是具有相同的属性和方法的一组对象的集合. 定义类 访问修饰符 class 类名 { 数据类型 属性名: 访问修饰符 返回值类型 方法名 {} } 创建对象:类名 对象名 = new 类名(); 使用对象:引用对象的属性:对象名.属性名;引用对象的方法:对象名.方法名(); 可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立. 成员变量和局部变量 成员变量:在类中定义,描述对象将要有什么.可以在本类的方法或其他类的方法中使用.java会给成员变量一个初始