1.初识:
C语言是面向过程的,关注于过程、解决问题的具体步骤;而C++是基于面向对象的,事情拆分成不同的对象,靠对象之间的交互完成。C++并不是完全面向对象的(由于兼容了C语言)
(1)类的引入:
在c语言中,有结构体这个概念,在结构体中可以定义各种变量。而在C++中,结构体还可以定义一些函数。
c语言结构体
struct student //tag
{
int age; // member-list
String name; //member-list
int weight; // member-list
}s1; // variable-list
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;
};
(2)类的定义
C++中的结构体定义,在C++中会被用类替代
class student
{
//可写入成员函数、成员变量
}; //注意花括号后的分号,这与java不同
类的定义以class关键字开始,分号结束,类中的元素是类的成员,类中的数据为成员变量或成员属性,类中的函数为类的成员函数
***提问:C++中结构体、类的异同:
两者的定义方式相似,使用成员的方式也相似(struct:结构变量名.变量名;class:实例化的对象名.成员名)
struct的成员默认的访问方式是public,而class默认的成员访问方式是private
(3)访问限定符
C++通过限定符来对数据进行封装:
public:公有,修饰的成员可在 类外被访问
protected:保护,修饰的成员不能在类外直接访问,可被派生类访问
private:私有,修饰的成员只有本类的成员、友元(之后会说到)访问
(4)类的作用域
类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员,需要使用 :: 作用域解析符 指明成员属于哪个类域。
(5)类的实例化
1. 类只是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它 2. 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量 3. 做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什 么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占 用物理空间
类名 对象名
void TextClass()
{
Student s1;
s1.name="Alice";
}
(6)类中对象的存储方式
只保存成员变量,成员函数存放在公共的代码段
一个类的大小,实际就是该类中”成员变量”之和,当然也要进行内存对齐,注意空类的大小,空类比 较特殊,编译器给了空类一个字节来唯一标识这个类。