C++类与对象基本语法(1)

版权声明:本文为博主原创文章,遵循GPL开源协议精神,转载请注明出处。 https://blog.csdn.net/Robot__Man/article/details/82889069

一、概述

1、什么是对象

(1)万物皆对象。
(2)程序就是一组对象,对象之间通过消息交换信息。
(3)类就是对对象的描述和抽象,对象就是类的具体化和实例化。

2、通过类描述对象

类就是从属性和行为两个方面对对象进行抽象。
属性:姓名、年龄、学号
行为:吃饭、睡觉、学习

3、面向对象程序设计(OOP)

(1)精通一种面向对象的元语言 —— UML。
(2)研究设计模式——GOF。


二、类的基本语法

1、类的定义

class 类名{};
1.1、成员变量 —— 属性
class 类名{
	类型 成员变量名;
};
1.2、成员函数 —— 行为
类名{
	返回类型 成员函数名(形参表){
		函数体
	}
};

如:

class Student{
	string m_name;
	int m_age;
	void eat(const string& food){
		...
	}
};

2、访问控制属性

(1)公有成员:public,谁都可以访问。
(2)私有成员:private,只有自己可以访问。
(3)保护成员:protected,只有自己和自己的子类可以访问。
(4)类的成员缺省访控属性为私有,而结构体的成员缺省访控属性为公有。

#include <iostream>
using namespace std;

class Student{
private:
	string m_name;
	int m_age;
public:
	void eat(const string& food){
		cout << m_age << "岁的" << m_name << "同学正在吃" << food <<"。" << endl;
	}
	void setName(const string& name){
		if (name == "2")
			cout << "你才" << name << "!" << endl;
		else
			m_name = name;
	}
	void setAge(int age){
		if (age < 0)
			cout << "无效的年龄!" << endl;
		else
			m_age = age;
	}
};

int main(){
	Student student;
	student.setName("张飞");
	student.setAge(25);
	student.eat("包子");
	return 0;
}

3、构造函数

class 类名{
	...
	类名(形参表){
		构造函数体;
	}
};

当一个对象被创建时,构造函数会自动被执行,其参数来自构造实参。
(1)构造函数可以通过构造参数实现重载。
(2)如果一个类没有定义任何构造函数,那么系统就会缺省的为其提供一个无参构造函数,该构造函数对于基本类型的成员变量不做初始化,对于类类型的成员变量,调用其相应类型的无参构造函数初始化。
(3)对象的创建过程
分配内存 -> 调用构造函数
           -> 调用类类型成员的构造函数 -> 构造函数的代码


4、初始化表

class 类名{
	类名(...) : 初始化表{
		构造函数体;
	}
};
const int x = 100;
x = 100;
int& a = b;
a = b;

(1)如果类中含有常量或引用型的成员变量,必须通过初始化表对其初始化。
(2)成员变量的初始化顺序仅与其被声明的顺序有关,而与初始化表的顺序无关。

class A{
public:
	A(char* psz) : m_str(psz), m_len(m_str.length()){}/*因为m_len先声明,故先初始化,但在初始化
		m_len时,要用到m_str的长度,但m_str现在还不存在,故会出错*/
private:
	size_t m_len;
	string m_str;
};
//正确的做法是在初始化表中减少变量间的相互耦合,这里把m_str.length()改为strlen(psz)。

5、析构函数

class 类名{
	~类名(void){
		析构函数体;
	}
};

当一个对被销毁时,自动执行析构函数。
局部对象离开作用域时被销毁,堆对象被delete时被销毁。
如果一个类没有定义任何析构函数,那么系统会提供一个缺省析构函数。缺省析构函数对基本类型的成员变量什么也不干,对类类型的成员变量,调用相应类型的析构函数。
一般情况下,在析构函数中释放各种动态分配的资源。
构造:基类-》成员-》子类
析构:子类-》成员-》基类


6、this指针

(1)一般而言,在类的构造函数或成员函数中,关键字this表示一个指针,对于构造函数而言,this指向正在被构造的对象,对于成员函数而言,this指向调用该函数的对象。
(2)this指针的用途
  A、在类的内部区分成员变量。
  B、在成员函数中返回调用对象自身。
  C、在成员函数内部通过参数向外界传递调用对象自身,以实现对象间交互。

 class A{
	//B m_b;
	B* m_b;
	B& m_b;
 };
 class B{
	A m_a;
 };
sizeof(A) ?

猜你喜欢

转载自blog.csdn.net/Robot__Man/article/details/82889069