C語言的一些高級議題
C語言之面向?qū)ο?/strong>
本文引用地址:http://m.butianyuan.cn/article/264327.htm我們經(jīng)常說C語言是面向過程的語言,而C++、JAVA是面向?qū)ο蟮模敲嫦驅(qū)ο蟛⒉皇荂++、JAVA的專利,C語言里面也有面向?qū)ο蟮乃枷耄热缥覀兘?jīng)常使用的結(jié)構(gòu)體。
struct student
{
char name[256];
int age;
};
學生的姓名和年齡,就是學生自身的屬性,和C++里面的成員變量是一樣的概念,但是這個結(jié)構(gòu)體里面并沒有體現(xiàn)出方法的使用。在面向?qū)ο笾杏蟹庋b的概念,結(jié)構(gòu)體中的成員我們不應該直接訪問,而應該通過方法訪問,我們可以添加訪問結(jié)構(gòu)體成員變量的方法。
char* get_name(student * self);//獲取學生姓名
void set_name(student * self, char* name);//設置學生姓名
char* get_name(student * self)
{
return self->name;
}
void set_name(student * self, char* name)
{
strncpy(self->name, name, sizeof(self->name));
}
此處省略age的設置和獲取功能。
現(xiàn)在類的數(shù)據(jù)、方法都有了,下一步就是要使用類創(chuàng)建、初始化、析構(gòu)、銷毀對象,在C++中有new、delete操作符負責創(chuàng)建和銷毀,使用C語言實現(xiàn)如下:
student * student _create(void);// 對象創(chuàng)建和初始化
void student _destroy(student * self);// 對象析構(gòu)和銷毀
student * student _create(void)
{
student * self = malloc(sizeof(student));
memset(self->name, 0x00, sizeof(self->name));
self->age = 0;
return self;
}
void student _destroy(student * self)
{
free(self);
}
至此,我們就可以采用面向?qū)ο蟮姆绞絹砭帉懘a了。
student * student1= NULL;
student1 = student _create();//創(chuàng)建對象
set_name(student1, "mary");//初始化student1的名字為mary
set_age(student1, 20); //初始化student1的年齡為20
get_name(student1);//獲取student1的姓名
student _destroy(student1);//銷毀對象
當然C語言還有很多強大的功能,比如可變參數(shù)的函數(shù)設計,無一例外都要借助于指針來實現(xiàn)。以上內(nèi)容參考于網(wǎng)絡資源,如有錯誤之處,懇請指正。
c語言相關(guān)文章:c語言教程
評論