目录
结构体(struct)
结构是一种用户自定义的数据类型,它可以包含多个不同类型的成员变量。结构体的定义方式如下:
struct StructName {
// 成员变量
type1 member1;
type2 member2;
// ...
};
结构体可以像普通变量一样使用,例如:
StructName structObj;
structObj.member1 = value1;
structObj.member2 = value2;
类(class)
类是一种用户自定义的数据类型,它可以包含成员变量、成员函数、构造函数、析构函数等。类的定义方式如下:
class ClassName {
public:
// 成员函数
function1();
function2();
// ...
private:
// 成员变量
type1 member1;
type2 member2;
// ...
};
类的成员变量和成员函数可以访问私有成员,而类的外部代码不能直接访问私有成员。类的使用方式如下:
ClassName classObj;
classObj.function1();
classObj.function2();
类的访问权限
类的成员变量和成员函数可以有不同的访问权限,包括public、private和protected。public成员可以在类的外部访问,private成员只能在类的内部访问,protected成员可以在类的内部和派生类中访问。
以下是一个简单的使用类的代码示例:
#include <iostream>
using namespace std;
class Shape {
public:
virtual void draw() {
cout << "This is a shape." << endl;
}
};
class Circle : public Shape {
public:
void draw() {
cout << "This is a circle." << endl;
}
};
class Rectangle : public Shape {
public:
void draw() {
cout << "This is a rectangle." << endl;
}
};
int main() {
Shape* shapePtr;
Circle circleObj;
Rectangle rectangleObj;
shapePtr = &circleObj;
shapePtr->draw();
shapePtr = &rectangleObj;
shapePtr->draw();
return 0;
}
这个代码示例定义了一个基类Shape和两个派生类Circle和Rectangle。
Shape类有一个公有成员函数draw,它输出一个默认的形状。
Circle类和Rectangle类都继承了Shape类,并重写了draw函数,输出各自的形状。
在main函数中,我们使用一个Shape类型的指针shapePtr来指向不同的派生类对象,并调用它们的draw函数。由于draw函数是虚函数,所以派生类对象的draw函数会被调用,而不是基类对象的draw函数。
C++是一种面向对象的编程语言,类是其中最重要的概念之一。下面是类在C++中的一些使用场景和示例代码:
定义对象和数据成员
class Person {
private:
string name;
int age;
public:
Person(string n, int a) {
name = n;
age = a;
}
string getName() {
return name;
}
int getAge() {
return age;
}
};
上面的代码定义了一个名为Person的类,它有两个私有数据成员name和age,以及公共构造函数和访问器函数。
实现继承
#include<iostream>
class Animal {
public:
void eat() {
std::cout << "Animal is eating";
}
};
class Cat : public Animal {
public:
void meow() {
std::cout << "Cat is meowing";
}
};
int main() {
Cat cat;
cat.eat(); // 继承了Animal的eat函数
cat.meow(); // Cat自己的meow函数
return 0;
}
上面的代码定义了两个类Animal和Cat,其中Cat从Animal继承。在Cat中,我们可以添加自己的函数meow,同时继承Animal的函数eat。
实现多态
class Shape {
public:
virtual void draw() {
cout << "Drawing a shape" << endl;
}
};
class Circle : public Shape {
public:
void draw() {
cout << "Drawing a circle" << endl;
}
};
class Rectangle : public Shape {
public:
void draw() {
cout << "Drawing a rectangle" << endl;
}
};
int main() {
vector<Shape*> shapes;
shapes.push_back(new Circle());
shapes.push_back(new Rectangle());
for (int i = 0; i < shapes.size(); i++) {
shapes[i]->draw(); // 调用各自的draw函数
delete shapes[i];
}
return 0;
}
上面的代码定义了三个类Shape、Circle和Rectangle,其中Shape是一个抽象类,Circle和Rectangle从Shape继承。
在Shape中,我们定义了一个虚函数draw,在Circle和Rectangle中,我们分别实现了自己的draw函数。
在主函数中,我们使用一个vector来存储Shape指针,并分别指向Circle和Rectangle对象。调用draw函数时,由于它是虚函数,C++会自动调用各自的实现。
实现封装
class Person {
private:
string name;
int age;
public:
Person(string n, int a) {
name = n;
age = a;
}
string getName() {
return name;
}
int getAge() {
return age;
}
void setName(string n) {
name = n;
}
void setAge(int a) {
age = a;
}
};
int main() {
Person p("Alice", 25);
cout << p.getName() << endl; // 输出Alice
p.setName("Bob"); // 修改名字
cout << p.getName() << endl; // 输出Bob
return 0;
}