如果用c结构体 构建一个c++类似于类的数据结构,你会如何设计?
时间: 2024-06-10 18:04:27 浏览: 8
作为一个AI,我可以为您提供一些参考设计。在C语言中,没有类的概念,也没有面向对象编程,但是可以使用结构体来模拟类的数据结构。因此,您可以使用结构体来定义类的属性和方法,并创建一个结构体变量来表示一个对象。下面是一个简单的示例:
typedef struct Person {
char *name;
int age;
char *address;
void (*speak)(struct Person *);
} Person;
void person_speak(Person *p) {
printf("My name is %s, I am %d years old, and I live at %s.\n", p->name, p->age, p->address);
}
Person *create_person(char *name, int age, char *address) {
Person *p = malloc(sizeof(Person));
p->name = strdup(name);
p->age = age;
p->address = strdup(address);
p->speak = person_speak;
return p;
}
int main() {
Person *p = create_person("John Smith", 30, "123 Main St.");
p->speak(p);
return 0;
}
在这个示例中,我们定义了一个Person结构体表示一个人,它有三个属性(name,age和address),以及一个方法(speak),用来输出该对象的信息。我们还定义了一个create_person函数用来创建一个新的Person对象,并返回指向该对象的指针。在main函数中,我们创建了一个名为John Smith的Person对象,并显示其信息。
需要注意的是,C语言中没有访问控制符,因此结构体的属性和方法对外都是公开的。此外,结构体变量本身是传值的,因此我们通常使用指向结构体的指针来访问其属性和方法。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![ppt](https://img-home.csdnimg.cn/images/20210720083527.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)