C++OOP对象和类的详细讲解
什么是对象和类?
在C++中,对象是指一个特定类的实例,其定义中包含了类的数据成员和函数成员。类是一种用户自定义的数据类型,可以定义包括数据成员和函数成员在内的各种内容,表示某一类似真实世界中的实体。
如何定义类和对象?
定义一个类,需要使用class关键字,紧接着是类名和一对大括号,“{}”内部定义类的数据成员和函数成员。
示例代码:
class Person{
private:
char name[20];
int age;
public:
void setName(char* n);
void setAge(int a);
char* getName();
int getAge();
};
void Person::setName(char* n){
strcpy(name,n);
}
void Person::setAge(int a){
age=a;
}
char* Person::getName(){
return name;
}
int Person::getAge(){
return age;
}
以上代码定义了一个名为Person的类,由两个私有成员变量(name和age)以及四个公有成员函数(setName、setAge、getName和getAge)组成。这个类可以用来表示一个人的姓名和年龄。
定义一个对象,需要指定对象的类型和名字。对象的命名应该具有一定的描述性,用于表明这个对象代表的含义。
示例代码:
Person p;
p.setName("Tom");
p.setAge(18);
cout<<p.getName()<<" "<<p.getAge()<<endl;
以上代码定义了一个名为p的Person类型的对象,然后用setName和setAge方法为其设置姓名和年龄,并用getName和getAge方法输出这个对象的姓名和年龄。
面向对象编程思想
面向对象编程(OOP)是一种用于程序设计的编程思想,使用OOP可以更好的组织代码,提高代码的可读性和可维护性,也能更好的适应程序的变化。OOP具有以下主要特点:
-
封装性:将数据和方法放在一起,避免数据成员被外部直接访问,只允许通过类提供的方法访问数据。
-
继承性:类和对象能具有继承关系,子类可以继承父类的属性和方法,方便代码复用。
-
多态性:同一种数据类型的对象,可以根据不同的使用环境表现出不同的行为,可以提高代码的灵活性。
封装性示例
封装性是OOP的重要特征之一,以下是一个示例。考虑一个Animal类,其中包括了一个私有成员变量name和一个公有成员函数getName。getName方法用于获取这个Animal对象的name属性。
class Animal{
private:
string name;
public:
void setName(string n);
string getName();
};
void Animal::setName(string n){
name=n;
}
string Animal::getName(){
return name;
}
以上代码中,name是Animal类的一个私有成员变量,只能通过类提供的setName和getName方法访问。在代码中,只有通过setName方法设置name的值才是有效的,防止外部对这个变量的直接修改。
继承性示例
继承性是OOP的重要特征之一,以下是一个示例。考虑一个Student类,它继承自上面的Person类,它有两个私有成员变量name和age,它们由Person类继承而来,还有一个私有成员变量score和两个公有成员函数setScore和getScore,用于设置和获取这个学生的成绩。
class Student:public Person{
private:
int score;
public:
void setScore(int s);
int getScore();
};
void Student::setScore(int s){
score=s;
}
int Student::getScore(){
return score;
}
以上代码中,Student类继承自Person类,从而可以使用Person类中的公有成员函数和变量。此外,Student类还增加了一个私有成员变量score和两个公有成员函数setScore和getScore用来设置和获取学生成绩。
多态性示例
多态性是OOP的重要特征之一,以下是一个示例。在Person类中增加一个公有成员函数printIntroduction,在Student类中重载这个函数,输出学生的姓名、年龄和成绩。
class Person{
private:
char name[20];
int age;
public:
void setName(char* n);
void setAge(int a);
char* getName();
int getAge();
virtual void printIntroduction();
};
void Person::setName(char* n){
strcpy(name,n);
}
void Person::setAge(int a){
age=a;
}
char* Person::getName(){
return name;
}
int Person::getAge(){
return age;
}
void Person::printIntroduction(){
cout<<"My name is "<<name<<", and I'm "<<age<<" years old."<<endl;
}
class Student:public Person{
private:
int score;
public:
void setScore(int s);
int getScore();
void printIntroduction();
};
void Student::setScore(int s){
score=s;
}
int Student::getScore(){
return score;
}
void Student::printIntroduction(){
cout<<"My name is "<<getName()<<", and I'm "<<getAge()<<" years old. My score is "<<score<<"."<<endl;
}
以上代码中,Person类增加了一个虚函数printIntroduction,在Student类中重载这个函数,输出学生的姓名、年龄和成绩。在调用这个函数时,会根据对象的实际类型返回不同的结果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++OOP对象和类的详细讲解 - Python技术站