c++类和对象基本概念

目录
  • 什么是类?
  • 什么是对象?
  • 类的定义
  • 创建对象
  • 成员访问(初始化)
  • 总结

什么是类?

一系列事物的抽象,对于c++而言,万事万物都可以是类。

类包括:属性+行为

属性:事物特征->数据类型描述;

行为事物的操作->函数描述;

什么是对象?

类的具体化,类的实例化,抽象->具象;

类的特点:封装、继承、派生、多态。

类的定义

创建方法:class

class 类名{

//权限限定词

public:

protected://保护属性

private://当不做继承时,数据成员写成私有属性

};//一定有一个分号

权限限定词作用:类外只能访问public属性下面的东西(接口),类外访问类中数据只能通过对象访问(static成员除外)

若类中申明类外实现,需要用类名限定(告诉别人函数属于哪个类的)

没有写在权限限定词下的属性,默认私有属性。

权限限定词只是限定类外对类中的访问,对类内无权限之分。

结构体中默认属性是共有属性

创建对象

普通对象、对象数组(使用较少)

#include <iostream>
#include <string>
using namespace std;
class MM
{
public:
	void print()
	{
		cout << name << "\t" << age << endl;
	}
	void initData(string nname,int nage)
	{
		name = nname;
		age = nage;
	}
protected:
	//新标准,可以在类中给数据直接初始化
	string name="默认值";
	int age=0;
};
int main()
{
	//没有写构造函数的情况下,和C语言的创建方式是一样的
	MM  mm;
	mm.print();			//没有初始化数据
	MM mmArray[4];		//一般很少用对象数组
	//mmArray[0]----mmArray[3]
	//数组: 多个变量名有规律,内存连续的变量的集合
	for (int i = 0; i < 4; i++)
	{
		mmArray[i].initData(string("name") + to_string(i), i + 19);
		mmArray[i].print();
	}
	MM* p = new MM;
	p->initData("张三", 18);
	p->print();
	delete p;
	p = nullptr;
	return 0;
}
#include <iostream>
#include <string>
using namespace std;
class GirlFriend
{
	void print()
	{
		cout << "不在限定词下的属性" << endl;
		cout << "默认为私有属性" << endl;
	}
public:
	//共有属性
	//成员函数
	//类中实现函数
	void  printData()
	{
		cout << m_name << "\t" << m_age << endl;
	}
	//为了访问不能访问的部分,通常提供一些接口
	void  initData(string name, int age);
protected:
	//保护属性
	//数据成员
	string m_name;
private:
	//当前类不做继承处理,数据成员写成私有属性
	int m_age;
};
//类外实现类中函数,需要类名限定,告诉别人这个函数是哪里来的
void GirlFriend::initData(string name,int age)
{
	//Lisa.initData("Lisa", 19);  name="Lisa" age=19
	m_name = name;    //Lisa.m_name=Lisa
	m_age = age;	  //Lisa.m_age=19;
	//mm.initData("MM", 29);   name="MM" age=29
	//mm.m_name=MM;
	//mm.age=29
}
struct MM
{
	int num;   //默认属性是公有属性
protected:
	string name;
private:
	int age;
};
void testMM()
{
	//MM mm = { 1001,"name",28 };
	MM mm;
	mm.num = 103;
	//mm.name = "Ilove";
	//mm.age = 13;
}
int main()
{
	GirlFriend  Lisa;
	Lisa.initData("Lisa", 19);
	Lisa.printData();
	//类外只能访问public
	//Lisa.m_name = "Lisa";
	//Lisa.m_age = 18;
	GirlFriend mm;
	mm.initData("MM", 29);
	mm.printData();
	//mm.print();  --->不能访问私有属性

	return 0;
}

成员访问(初始化)

1.提供共有接口来初始化数据(传参)

2.通过提供共有接口返回值方式初始化数据

#include <iostream>
#include <string>
using namespace std;
class MM
{
public:
	//传参
	void initData(string name, int age)
	{
		m_name = name;
		m_age = age;
	}
	//返回引用
	string& getName()
	{
		return m_name;
	}
	int& getAge()
	{
		return m_age;
	}
	void print()
	{
		cout << m_name << "\t" << m_age << endl;
	}
protected:
	//默认初始化
	string m_name="默认值";
	int m_age=0;
	//不做初始化是一个垃圾值
};

int main()
{
	MM girl;
	girl.initData("girl", 19);
	girl.print();

	MM mm;
	mm.getName() = "mm";
	mm.getAge() = 18;
	mm.print();

	MM boy;
	boy.print();

	return 0;
}

c++有头链表与c对比:

#include <iostream>
#include <string>
using namespace std;
#if 0
struct Node
{
	int data;
	struct N ode* next;
};
struct Node* createList()
{
	Node* headNode = new Node;
	headNode->next = nullptr;
	return headNode;
}
struct Node* createNode(int data)
{
	Node* newNode = new Node;
	newNode->data = data;
	newNode->next = nullptr;
	return newNode;
}
void insertData(Node* headNode, int data)
{
	Node* newNode = createNode(data);
	newNode->next = headNode->next;
	headNode->next = newNode;
}
void printList(Node* headNode)
{
	Node* pMove = headNode->next;
	while (pMove != nullptr)
	{
		cout << pMove->data<<" ";
		pMove = pMove->next;
	}
	cout << endl;
}
void testListC()
{
	Node* list = createList();
	insertData(list, 10);
	insertData(list, 20);
	printList(list);
}
#endif

#if 0
struct Node
{
	int data;
	Node* next;
};
class List
{
public:
	void createList()
	{
		headNode = new Node;
		headNode->next = nullptr;
	}
	void insertData(int data)
	{
		Node* newNode = new Node;
		newNode->data = data;
		newNode->next = nullptr;

		newNode->next = headNode->next;
		headNode->next = newNode;
	}
	void printList()
	{
		Node* pMove = headNode->next;
		while (pMove != nullptr)
		{
			cout << pMove->data << " ";
			pMove = pMove->next;
		}
		cout << endl;
	}
protected:
	Node* headNode;		//用一个指针表示整个表头
};
void testList1()
{
	List* pList = new List;		//C++第一步:创建对象
	pList->insertData(10);
	pList->insertData(20);
	pList->printList();
}
#endif
class Node
{
public:
	Node*& getNext()
	{
		return next;
	}
	int& getData()
	{
		return data;
	}
protected:
	int data;
	Node* next;
};
class List
{
public:
	void createList()
	{
		headNode = new Node;
		headNode->getNext() = nullptr;
	}
	void insertData(int data)
	{
		Node* newNode = new Node;
		newNode->getNext() = nullptr;
		newNode->getData() = data;

		newNode->getNext() = headNode->getNext();
		headNode->getNext() = newNode;
	}
	void printList()
	{
		Node* pMove = headNode->getNext();
		while (pMove != nullptr)
		{
			cout << pMove->getData() << "\t";
			pMove = pMove->getNext();
		}
		cout << endl;
	}
protected:
	Node* headNode;
};
void testList2()
{
	//List list;
    //list.insertList(10);
    List* pList = new List;		//C++第一步:创建对象
	pList->createList();
	pList->insertData(10);
	pList->insertData(20);
	pList->printList();
}
int main()
{
	//testListC();
	testList2();
	return 0;
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • C++ 再识类和对象

    目录 类的6个默认成员函数 构造函数 1.概念 2.特性 隐式构造函数 无参和全缺省的函数均为默认构造函数 成员变量的命名风格 补充 析构函数 1.概念 2.特性 c++编译器在对象生命周期结束时自动调用析构函数 拷贝构造函数 1.概念 2.特性 若未显式定义,系统会生成默认的拷贝构造函数 浅拷贝的注意事项 总结 类的6个默认成员函数 一个类中如果什么成员都没有,那么这个类称为空类.空类中是什么都没有吗?其实不然,任何一个类,再我们不写的情况下,都会自动生成下面6个默认成员函数: 本篇文章将对这

  • 详解C++之类和对象(1)

    目录 C语言和C++的一大区别 struct和class的区别 总结 c++类的由来(或者说为什么要增加类):我们知道c语言是面向过程的语言,c++是即面向过程又是面向过程的语言.那么这两个有着什么样的区别和联系呢? C语言和C++的一大区别 接下来我们利用c语言的struct来说明: C 语言中,结构体中只能定义变量. 在 C++ 中,结构体内不仅可以定义变量,也可以定义函数. 例如:如果我们用C语言实现一下的功能,那么我们会发现,在struct内我们只能去定义一些变量 的类型,而我们需要的函

  • 详解C++之类和对象

    目录 一.构造函数 1.构造函数的定义: 2.构造函数的特征: 3.构造函数的实现: 3.1.系统默认的构造函数 3.2无参构造 3.3 带参构造 二 析构函数 1.析构函数的定义 2.析构函数的特征 三 拷贝函数 1.拷贝函数定义 2.拷贝函数的特性 3.拷贝函数的实现 总结 一.构造函数 1.构造函数的定义: 构造函数 是一个 特殊的成员函数,名字与类名相同 , 创建类类型对象时由编译器自动调用 ,保证每个数据成员都有 一个合适的初始值,并且 在对象的生命周期内只调用一次 . 其实构造函数的

  • C++类和对象补充

    目录 一. 再看构造函数 1.函数体内赋初值 2.初始化列表 几点注意 3.explicit关键字 二.static成员 1.概念 2.特性 三.友元 1.友元函数 2.友元类 四.内部类 总结 一. 再看构造函数 我们之前已经了解了构造函数的基本内容,那么这里我们将深入认识构造函数. 1.函数体内赋初值 class Date { public: Date(int year, int month, int day) { _year = year; _month = month; _day = d

  • c++类和对象基本概念

    目录 什么是类? 什么是对象? 类的定义 创建对象 成员访问(初始化) 总结 什么是类? 一系列事物的抽象,对于c++而言,万事万物都可以是类. 类包括:属性+行为 属性:事物特征->数据类型描述: 行为事物的操作->函数描述: 什么是对象? 类的具体化,类的实例化,抽象->具象: 类的特点:封装.继承.派生.多态. 类的定义 创建方法:class class 类名{ //权限限定词 public: protected://保护属性 private://当不做继承时,数据成员写成私有属性

  • C++初识类和对象

    目录 一.初步认识面向过程和面向对象 二.类的引入 三.类的定义 1.定义和声明全部放在类体中,需要注意的是: 2.声明与定义分离 四.类的访问限定符及封装 1.访问限定符 2.封装 五.类的作用域 六.类的实例化 七.类对象模型 1.计算类对象的大小 2.类对象的存储方式 八.this指针 1.this指针的引出 2.this指针的特性 总结 一.初步认识面向过程和面向对象 面向过程,关注的是怎么去做,比如在外卖系统中,强调点餐,做餐,送餐等一系列动作的方法,反映到语言中是函数方法的实现:而面

  • C++进一步认识类与对象

    目录 赋值操作符重载函数 1.运算符重载 2.赋值运算符重载 3.默认的赋值操作符重载函数 4.赋值重载函数与拷贝构造函数的对比 日期类的实现 const成员 1.const修饰类的成员函数 2.小结 取地址及const取地址操作符重载函数 总结 赋值操作符重载函数 1.运算符重载 C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似. 其函数名为: operator + 需要重载的运算符符

  • 解析Java的JVM以及类与对象的概念

    Java虚拟机(JVM)以及跨平台原理 相信大家已经了解到Java具有跨平台的特性,可以"一次编译,到处运行",在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的. 那么,跨平台是怎样实现的呢?这就要谈及Java虚拟机(Java Virtual Machine,简称 JVM). JVM也是一个软件,不同的平台有不同的版本.我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件.Java虚拟机就是负责将字节码文件翻译成特定平

  • Python面向对象思想与应用入门教程【类与对象】

    本文实例讲述了Python面向对象思想与应用.分享给大家供大家参考,具体如下: 面向对象思想 1.面向对象的设计思想 面向对象是基于万物皆对象这个哲学观点. 2.面向对象和面向过程的区别 面向过程 在生活中: 它是一种看待问题的思维方式,在思考问题的时候,着眼问题是怎样一步一步解决的,然后亲力亲为去解决问题[类似于公司里的执行者]. 在程序中: ​ 代码是从上而下顺序执行,各个模块之间的关系尽可能简单,在功能上相对独立,程序的流程在写程序的时候就已经决定. 面向对象 在生活中: 它是另一种看待问

  • C++类和对象到底是什么

    目录 1.C++ 中的类 2.面向对象编程(Object Oriented Programming,OOP) 1.C++ 中的类 C++ 中的类(Class)可以看做C语言中结构体(Struct)的升级版.结构体是一种构造类型,可以包含若干成员变量,每个成员变量的类型可以不同:可以通过结构体来定义结构体变量,每个变量拥有相同的性质. 例如: #include <stdio.h> //定义结构体 Student struct Student{ //结构体包含的成员变量 char *name; i

  • Java 精炼解读类和对象原理

    面向对象.面向过程 什么是类? 什么是对象? 这是非常抽象的两个概念!!!!!!!! 在说清楚类和对象的概念之前,给大家讲一下什么是面向对象.面向过程,以此来推出我们类和对象的概念. 面向过程:以洗衣服为例:拿盆.放水.放衣服.放洗衣粉.手搓.换水.拧干.晾衣服,这个过程就是面向过程.  面向对象:以洗衣服为例:人把衣服放进洗衣机,倒入洗衣粉,洗完晾干,不需要关心洗衣服整个过程是怎么完成的,只需要找对象,创建对象,使用对象.在好比我们使用toString函数,我们并不关心toString函数具体

  • 进一步深入Ruby中的类与对象概念

    Ruby是纯面向对象的语言,所有项目似乎要Ruby中为一个对象.Ruby中的每个值是一个对象,即使是最原始的东西:字符串,数字甚至true和false.即使是一个类本身是一个对象,它是Class类的一个实例.本章将通过所有功能涉及到Ruby的面向对象. 类是用来指定对象的形式,它结合了数据表示和方法操纵这些数据,转换成一个整齐的包.在一个类的数据和方法,被称为类的成员. Ruby类的定义: 定义一个类,定义的数据类型的草图. 这实际上并不定义任何数据,但它定义的类名字的意思什么,即是什么类的对象

  • 讲解C#面相对象编程中的类与对象的特性与概念

    类 "类"是一种构造,通过使用该构造,您可以将其他类型的变量.方法和事件组合在一起,从而创建自己的自定义类型.类就像一个蓝图,它定义类型的数据和行为.如果类没有声明为静态类,客户端代码就可以创建赋给变量的"对象"或"实例",从而使用该类.在对变量的所有引用都超出范围之前,该变量始终保持在内存中.所有引用都超出范围时,CLR 将标记该变量以供垃圾回收.如果类声明为静态类,则内存中只存在一个副本,并且客户端代码只能通过该类自身而不是"实例变

  • 浅析Ruby中的类对象的概念

    面向对象的程序涉及类和对象. 一个类是蓝本,从个别对象被创建.在面向对象的术语,我们说小明的自行车是被称为自行车类的对象实例. 任何车辆的例子.它包括轮子,马力,燃油或燃气罐容量.这些特点形成的类车辆的数据成员.可以从其他车辆区分这些特征. 车辆也有一定的功能,如停止,驾驶,超速驾驶.即使这些功能形成的类车辆的数据成员.因此,可以定义一个类作为一个组合的特点和功能. 车辆类可以被定义为: Class Vehicle { Number no_of_wheels Number horsepower

  • javaScript中定义类或对象的五种方式总结

    第一种方式: 工厂方法 能创建并返回特定类型的对象的工厂函数(factory function). function createCar(sColor){ var oTempCar = new Object; oTempCar.color = sColor; oTempCar.showColor = function (){ alert(this.color); }; return oTempCar; } var oCar1 = createCar(); var oCar2 = createCa

  • Javascript学习笔记5 类和对象

    面向对象语言三大特点:继承,多态,封装,这三点虽然Javascript没有提供天然的语法实现,但是我们都可以通过prototype等技巧来实现,因此这种说法似乎不过分. 在Javascript中,构造对象有三种方式: 1. 首先,我们要明确一个概念,Javascript是一种弱类型的语言,一方面体现在Javascript的变量,返回类型都是没有强类型约束的,另一方面,Javascript可以为对象任意添加属性和方法.根据这个,我们可以写出这样的代码: 复制代码 代码如下: <script typ

随机推荐