简述类与对象--上

139 阅读1分钟

什么是面向对象和面向过程

面向过程就是自顶向下,注重过程,关注步骤,C语言就是这样的。 而C++是把一个问题拆分不同的对象,靠对象之间的交互来完成。

类的引入

在C语言中结构体只能定义变量却不能定义函数,C++中都可以

struct Student

{

void SetStudentInfo(const char

*

name, const char

*

gender, int age)

{

strcpy(_name, name);

strcpy(_gender, gender);

_age

=

age;

}

void PrintStudentInfo()

{

cout<<_name<<

"

"

<<_gender<<

"

"

<<_age<<endl;

}

char _name[20];

char _gender[3];

int _age;

};

把里边的struct 换成class

类的定义

class是定义类的关键字例如

class className

{

// 类体:由成员函数和成员变量组成

}; //

一定要注意后面的分号

类有两种定义方式一种是声明和定义都放在类里面,一种是声明放在.h文件里面,定义在cpp文件里面,更推荐第二种方式,因为第一种方式容易把函数变成内联函数

类的访问限定符及其封装

类具有三种访问限定符,公有,保护和私有,public protected private

  1. public修饰的成员在类外可以直接被访问

  2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)

  3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止

  4. class的默认访问权限为private,struct为public(因为struct要兼容C) C++中的class和struct有什么区别 C++是因为兼容C语言,带有struct可以定义结构体,struct和class都可以定义类,作用是一样的,但是struct定义的类成员的默认访问方式是public,class是private

什么是封装

封装就是把数据和行为放在一起,当成一个整体只向用户暴露使用接口而不关心里边的细节 面向对象的三大特性,封装继承和多态

类的作用域

一个类定义了一个新的作用域,类的所有成员都在类的作用域中,在类的外面要使用::符号来使用类里面的成员

类的实例化

用类创建对象的过程就叫做类的实例化

  • 类只是一个模型一样的东西限定了类有多少成员,但是并没有分配实际的内存空间来储存它
  • 一个类可以实例化出多个对象,实例化的对象占用实际的物理空间,储存类成员变量

如何计算类对象的大小

一个类的大小,实际上就是成员变量内存之和,但是要进行内存对齐,注意空类也算一个字节

this指针

this是一个const类型的指针,它指向当前对象,通过它可以指向当前对象的所有成员 下面有一个实例

1.  #include <iostream>
1.  using namespace std;
1.
1.  class Student{
1.  public:
1.  void setname(char *name);
1.  void setage(int age);
1.  void setscore(float score);
1.  void show();
1.  private:
1.  char *name;
1.  int age;
1.  float score;
1.  };
1.
1.  void Student::setname(char *name){
1.  this->name = name;
1.  }

里面的成员函数的形参和类的变量重名了,通过this指针来实现形参给成员变量赋值的目标。 this指针实际上是成员函数的一个形式参数,调用成员函数的时候将对象的地址作为实参传递给this,不过this是隐式的不显示在代码中。